#include <stdio.h>
/*
快速排序选择一个基准值(此处选为区间最右边的元素)
左边元素全部小于基准值,右边全部元素大于基准值
*/
int exchange(int a[], int start, int end)
{
int flag = a[end];
int i = start;
int j = start;
for (i = start; i < end; i++)
{
if (a[i] <= flag)
{
int tmp = a[i];
a[i] = a[j];
a[j] = tmp;
j++;
}
}
int tmp = a[j];
a[j] = a[end];
a[end] = tmp;
for (int k = start; k <= end; k++)
{
printf("%d", a[k]);
}
printf("\n");
return j;
}
//递归实现快速排序
/*
踩坑点:结束递归条件必须是start >= end,
不能是start == end,因为start 有可能小于end,
这样会导致多交换一次,导致原本已经排好序定好位置的数组元素位置发生改变
*/
int sort_quick(int a[], int start, int end)
{
if (start >= end)
{
return 0;
}
int mid = exchange(a, start, end);
if (mid > 0 )
{
sort_quick(a, start, mid - 1);
}
if(mid < end)
{
sort_quick(a, mid + 1, end);
}
}
int main(void) {
int a[10] = { 4, 2, 3, 1, 8, 6, 9, 2,10, 3 };
sort_quick(a, 0, 9);
for (int i = 0; i < 10; i++)
{
printf("%d", a[i]);
}
printf("\n");
return 0;
}
普通快速排序(C语言实现)
于 2023-08-02 14:05:26 首次发布
3075





