数据结构、算法总述:数据结构/算法 C/C++-CSDN博客
快速排序----------------分治
步骤:
1.确定分界点 q[ l ] , q[ r ] , q[(l + r) / 2 ] (随机)
2.调整范围
3.递归处理左右两边
void quick_sort(int q[], int l, int r)
{
if (l >= r) return;
int x = q[(l + r + 1) / 2], i = l - 1, j = r + 1;
while (i < j)
{
do i ++ ; while (q[i] < x);
do j -- ; while (q[j] > x);
if (i < j) swap(q[i], q[j]);
}
quick_sort(q, l, j);
quick_sort(q, j + 1, r);
}
题目
快速排序 - AcWinghttps://www.acwing.com/activity/content/problem/content/819/
归并排序----------------分治
步骤:
1.确定分界点 mid = (l + r) / 2
2.递归排序 left , right
3.归并------合二为一
void merge_sort(int q[], int l, int r)
{
if (l >= r) return;
int mid = l + r >> 1;// l + r >> 1 等价于 (l + r) / 2
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];
}
题目