/*
说明:
代码参考过网上代码,但分析为个人原创,本贴重在说明快速排序算法的思想和运行过程。
*/
代码部分:
#include
#include
void quickSort(int* arr,int startPos, int endPos)
{
int i, j;
int key;
key = arr[startPos];
i = startPos;
j = endPos;
while (i
{
while (arr[j] >= key && i
arr[i] = arr[j];
while (arr[i] <= key && ikey或遍历完
arr[j] = arr[i];
}
arr[i] = key;
if (i - 1>startPos) quickSort(arr, startPos, i - 1); //————1 如果key前还有两个及以上的数,排key前的数(有一个的话自然就不用排了)
if (endPos>i + 1) quickSort(arr, i + 1, endPos);//————2 如果key后还有两个及以上的数,排key后的数
}
int main()
{
int a[11], i;
for (i = 0; i<11; i++)
scanf_s("%d", &a[i]);
quickSort(a, 0, 10);
for (i = 0; i<11; i++)
printf("%d ", a[i]);
printf("\n");
return 0;
}
解析部分:
/*
以数组 a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9] a[10]
0 2 32 39 23 45 36 57 14 27 39 为例,说明核心代码的实现机制
第一轮:
首先进入quickSort(a, 0, 10); key=0,i=0,j=10,进入外层while,进入第一个内层while,由于0是数组中最小的,故j一直扫到头,j=0,arr[0] = arr[0]=0;
显然无法进入第二个内层while,由于i=j=0,结束外层while,执行a[0]=key=0;显然不进入第一个if,进入第二个if,执行quickSort(a, 1, 10);进行从a[1]到
a[10]的排序,第一轮结束。
第二轮;
执行quickSort(a, 1, 10),key=2,i=1,j=10,进入外层while,进入第一个内层while,由于2是传入段中最小的&