クイックソートアルゴリズムの核となるアイデアは、この小さな値よりも右の「スロー」は左に、この値よりも大きい値に設定されている「スローを。」
アレイ工程のクイックソート:
- 2つの変数をi、jは、ソートの先頭に設定した:i = 0、J = N-1;(nはソートの数)
- 変数キーに割り当てられた比較値として配列内の最初の要素で、すなわち、キー= [0]。
- jから前進1検索、即ち、前後に(-j)、最初のキー値[J]、[J]と[i]は交換可能である未満である見つけます。
- 次いで、(++ i)を前後、最初の値を検索するためのキーよりも大きいから、バックI、すなわちから検索[i]は、[i]と[j]は交換可能です。
- iがJに等しくなるまで、第三及び第四のステップを繰り返します。この時点で、我々は左側にフルシーケンスキーを確保することができ、キー、キーより大きいすべての値の右側のキーよりも小さな値です。その後、上記の手順を再帰的にソートが終了するまで、両側で行われます。
#include <stdio.h>
void QuickSort (int *,int,int);//函数声明,快速排序//
int main(int argc,const char *argv[])
{
int i;
int a[]={900,2,-58,3,34,5,76,7,32,4,43,9,1,56,8,-70,635,-234,532,543,2500};
QuickSort(a,0,20);/*引用起来很简单,0为第一个元素的下表,20为最后一个元素的下表*/
printf("最终排序结果为:\n");
for(i=0;i<=20;++i)
{
printf("%d\n",a[i]);
}
printf("\n");
return 0;
}
void QuickSort(int *a,int low,int high)
{
int i,j;
i=low;
j=high;
int key=a[low];
if(low>=high)//如果low>=high说明排序结束了
{
return;
}
while(low<high)//该while循环结束一次表示比较了一轮//
{
while(low<high&&key<=a[high])
{
--high;
}
if(key>a[high])
{
a[low]=a[high];
++low;
}
while(low<high&&key>=a[low])
{
++low;
}
if(key<a[low])
{
a[high]=a[low];
--high;
}
}
a[low]=key;
QuickSort(a,i,low-1);
QuickSort(a,low+1,j);
}