#include<stdio.h>
#include<stdlib.h>
void
change(int
*pa,
int *pb)//根據位址交換兩個變量的值
{
int
temp = *pa;
*pa = *pb;
*pb =
temp;
}
show(int
*p,
n)//顯示數組狀态
printf("\n此時此刻數組的狀态");
for (int
i = 0;
i <
n;
i++)
printf("%5d",
p[i]);//*(p+i)
void
quicksort(int
left,
right)
printf("\n要處理的子序列
");
i =
left;
i <=
right;
i++)//從左到右列印要處理子序列
p[i]);
left;//a[0]
//最左邊的數
j =
right + 1;//a[10]
最右邊的數
if (i
< j)//循環的可用條件
do
i++;
} while (p[i]<p[left]
&& i <=
right);//統計多少個小于它的數,p[i]就是最右邊小于第一個數的數
j--;
} while (p[j]
>= p[left]
&& j>left);//統計下标最左邊大于第一個數的數
printf("\na[%d]=%d,a[%d]=%d",
i,
p[i],
j,
p[j]);//列印中間資料
< j)
change(&p[i],
&p[j]);
show(p,
10);
} while (i
< j);///j作為分割點
小于的數往左,大于的數往右
change(&p[left],
&p[j]);//以j作為分割點
printf("\np[%d]=%d",
p[j]);
10);//
quicksort(p,
j - 1);//分割左邊
j + 1,
right);//分割右邊
main()
a[10] = { 19, 9, 20, 8, 38, 49, 11, 58, 34, 22 };
show(a,
10);//顯示數組沒有排序的狀态
quicksort(a,
0, 10 - 1);
system("pause");