void swap(int *a, int *b) //交换数组中两元素的位置
{
int tmp = *a;
*a = *b;
*b = tmp;
}
int partition(int *a, int l, int r)
{
int idx = l + rand() % (r - l + 1); //此操作是随机取一个下标,范围是[l, r]
swap(&a[l], &a[idx]);
int x = a[l];
int i = l, r = j;
while (i < j)
{
while (i < j && a[j] > x)
{
j--;
}
if (i < j) //为了保证上面while循环结束的原因是a[j] > x而不是i < j
{
swap(&a[i], &a[j]);
i++;
}
while (i < j && a[i] < x)
{
i++
}
if (i < j)
{
swap(&a[i], &a[j]);
j--;
}
}
a[i] = x;
return i;
}
//快速排序是将一个待排序的数组随机分成两份,然后通过partition操作找到一个
一个下标对应的数,这个数比它左边所有数大,比它右边所有数小,然后再在两部分
重复上述操作,是一个递归操作//
void quicksort(int *a, int l, int r)
{
if (l >= r) //当
{
return ;
}
int pivox = partition(a, l, r);
quicksort(a, l, pivox - 1);
quicksort(a, pivox + 1, r);
}
快速排序框架(quick sort)
于 2024-06-16 15:46:08 首次发布