代码错误还未修改,明天继续
#include<stdio.h>
/*快排思想:首先选择一个数组中的值作为划分标准,这个值
这个值 为了规避最坏情况,可以采用第一个,第二个或者随机
将这个值和第一个值交换 ,然后定义两个指针从两头遍历
左边走到大于划分标准值,右边走到小于等于标准值时
交换两者的位置,直到右指针和左指针重合
*/
int Paration(int a[],int begin, int end);//指定要排序的数组和
void sortP(int a[],int begin,int end);
void swap(int *a, int *b);
int main()
{
int a[] = {7, 2, 4, 11, 77, 5, 6, 20};
sortP(a, 0, 7);
return 0;
}
int Paration(int a[], int begin, int end)
{//这里选择第一个值为划分值
int i = -1;
int l = begin;
int r = end - 1;
while (l < r)
{
while (a[l++] < a[0]);
while (a[r--] >= a[0]);
swap(&a[l - 1],&a[r+1]);
}
swap(&a[0], &a[r-1]);
i = r - 1;
return i;
}
void swap(int *a, int *b)
{
int temp = *a;
*a = *b;
*b = temp;
}
void sortP(int a[], int begin, int end)
{
if (begin < end)
{
int i = Paration(a, begin, end);
sortP(a, begin, i - 1);
sortP(a, i + 1, end);
}
}