1. 無秩序アレイにおいて、第一の基準値をキーとして(通常は配列要素0を見つけるために)数を見つける
のにその小さい、基準よりも大きな値の左側の基準値よりも2右側(それは小さいよりも左の鍵は、それが右より大きいので)
、同じものもソートするのと同じ方法を使用して右のキーデータの同じ種類を使用しての重要な方法で残っている3.データ方法:再帰
質問:キー大型の右側よりも左側に小さな鍵を置くよりも、どうすればよいですか?
1.キーに割り当てられた配列の0番目の要素(掘削)
別の掘り込みAに続いて、次いで、(割り当てられた値の前にピットが見つかりました)充填ピットの前にある小さなキーを見つけるために、左より右から2ピット。
キーの後ろの左から右に見て3は、充填穴よりも大きいが、穴の前で、この時間は、掘っ
4. 2〜3工程サイクル
最後に5キーでいっぱいピット
/*
@brief: 快速排序函数
@param: int *a接收数组地址
@param: int left数组左边的下标
@param: int right数组右边一个下标
@return 无返回值
*/
void quick_sort(int *a, int left, int right)
{
int n = left;
int m = right;
int key = a[n];
if(n >= m)
return;
while(n < m)
{
//从右边往左边找比key小的值
while(n < m && a[m] >= key)
m--;
//如果找到了要填前面的坑
if(n < m)
a[n] = a[m];
else
break;
//从左边往右边找比key大的值
while(n < m && a[n] <= key)
n++;
//如果找到了要填后面的坑
if(n < m)
a[m] = a[n];
else
break;
}
//最后一个坑
a[n] = key; //a[m] = key;也可以因为最后一个坑的时候m == n
//对key左边的部分排序
quick_sort(a, left, n-1);
//对key右边的部分排序
quick_sort(a, n+1, right);
}
int main(void)
{
int a[] = {9, 6, 2, 4, 6, 4, 0, 6, 2, 0};
int n = 0;
int m = sizeof(a)/sizeof(a[0]) - 1; //m = 10 - 1;
quick_sort(a, n, m);
int i;
for(i = 0; i < 10; i++)
printf("%d ", a[i]);
printf("\n");
return 0;
}