빠른 정렬 알고리즘의 핵심 아이디어는이 작은 값보다 권리 "던져"왼쪽이 값보다 큰 값으로 설정되어 "던져."
배열 프로세스의 빠른 종류 :
- 두 변수 i가, j는, 한 종류의 처음에 설정 I = 0, J = N-1 (N 정렬의 수이다)
- 가변 키에 할당 된 값과 비교 어레이의 첫 번째 요소에서, 즉 열쇠 = A [0];
- 순방향 J에서 먼저 검색, 즉 표리 (-j), 첫 번째 키 값이 [J] 상기 A [J]와 미만 찾을 A [i]를 교환 할 수있다;
- 이어서 (++ i)를 앞에서 뒤로, 제 1 값을 찾을 수있는 키보다 큰에서 위로 이동, 즉로부터 검색하는 [I]은이 [I] 및 [J] 교환 할 수있다;
- 세 번째와 네 번째 단계를 반복하는 것은 난 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);
}