快速排序(不稳定)
//算法思想:从序列中选一个元素作为分界点x,利用双指针遍历序列,使得x左侧//的元素都小于它且右侧的元素都大于它。然后递归的对分界点左右两个子序列进//行排序。
void quickSort(int q[], int r, int l){
if(l >= r) return;
int i = l - 1, j = r + 1, x = (r - l + 1) >> 1;
while(i < j){
do i ++; while(q[i] > x);
do j --; while(q[j] < x);
if(i < j) swape(q[i], q[j]);
}
quickSort(q, l, j);
quickSort(q, j + 1, r);
}
归并排序
算法思想:
1、以中间值mid 为分界点;
2、递归排序left 和 light;
3、归并(合二为一);
void merge_sort(int q[], int l, int r)
{
if (l >= r) return;
int mid = l + r >> 1;
merge_sort(q, l, mid);
merge_sort(q, mid + 1, r);
int k = 0, i = l, j = mid + 1;
while (i <= mid && j <= r)
if (q[i] <= q[j]) tmp[k ++ ] = q[i ++ ];
else tmp[k ++ ] = q[j ++ ];
while (i <= mid) tmp[k ++ ] = q[i ++ ];
while (j <= r) tmp[k ++ ] = q[j ++ ];
for (i = l, j = 0; i <= r; i ++, j ++ ) q[i] = tmp[j];
}