共计 686 个字符,预计需要花费 2 分钟才能阅读完成。
排序之间性能的比拟
间接插入排序
将一个记录插入到已排序好的有序表中,从而失去一个新,记录数增 1 的有序表。即: 先将序列的第 1 个记录看成是一个有序的子序列,而后从第 2 个记录一一进行插入,直至整个序列有序为止 。
插入排序算法的个别步骤:
1. 从第一个元素开始,该元素能够认为已被排序;
2. 取出下一个元素,在曾经排序的元素序列中从后向前扫描;
3. 如果该元素(已排序)大于新元素,将该元素移到下一个地位;
4. 反复步骤 3,直到找到已排序的元素小于或者等于新元素的地位;
5. 将新元素插入到该地位后,反复 2~5
void insetSort(int arr[], int n)
{for (int i = 1; i < n; i++)
{for (int j = i-1; j >= 0; j--)
{if (arr[j] > arr[i])
{int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
}
希尔排序
希尔排序的算法思维: 将待排序数组依照步长 gap 进行分组,而后将每组的元素利用间接插入排序的办法进行排序;每次将 gap 折半减小,循环上述操作;当 gap= 1 时,利用直接插入,实现排序。
void shellSort(int arr[], int len)
{
int insertNum;
int grap = len / 2;
while (grap)
{for (int i = grap; i < len; i++)
{insertNum = arr[i];
int j = i;
while (j >= grap && insertNum < arr[j - grap])
{arr[j] = arr[j - grap];
j -= grap;
}
arr[j] = insertNum;
}
grap /= 2;
}
}
正文完