快速排序
基本思想: (分治)
从数列中取一个数作为key值;
小于key的数放在左侧、大于key的数放在右侧;
对左右两个小数列重复第二步,直至各区间只有一个数
void quick_sort(int s[], int l, int r)
{
if (l < r)
{
//Swap(s[l], s[(l + r) / 2]); //将中间的这个数和第一个数交换 参见注1
int i = l, j = r, x = s[l];
while (i < j)
{
while(i < j && s[j] >= x) // 从右向左找第一个小于x的数
j--;
if(i < j)
s[i++] = s[j];
while(i < j && s[i] < x) // 从左向右找第一个大于等于x的数
i++;
if(i < j)
s[j--] = s[i];
}
s[i] = x;
quick_sort(s, l, i - 1); // 递归调用
quick_sort(s, i + 1, r);
}
}
插入排序
默认前面的数组都是有序的,选择一个数,往数组里面插入
希尔排序
数据基本有序的情况下使用插入排序
在要排序的一组数中,根据某一增量分为若干子序列,并对子序列分别进行插入排序。
然后逐渐将增量减小,并重复上述过程。直至增量为1,此时数据序列基本有序,最后进行插入排序。
归并排序
将两个有序数归并到一个数组中