빠른 정렬 알고리즘을 기반으로

빠른 정렬 알고리즘의 핵심 아이디어는이 작은 값보다 권리 "던져"왼쪽이 값보다 큰 값으로 설정되어 "던져."
배열 프로세스의 빠른 종류 :

  1. 두 변수 i가, j는, 한 종류의 처음에 설정 I = 0, J = N-1 (N 정렬의 수이다)
  2. 가변 키에 할당 된 값과 비교 어레이의 첫 번째 요소에서, 즉 열쇠 = A [0];
  3. 순방향 J에서 먼저 검색, 즉 표리 (-j), 첫 번째 키 값이 [J] 상기 A [J]와 미만 찾을 A [i]를 교환 할 수있다;
  4. 이어서 (++ i)를 앞에서 뒤로, 제 1 값을 찾을 수있는 키보다 큰에서 위로 이동, 즉로부터 검색하는 [I]은이 [I] 및 [J] 교환 할 수있다;
  5. 세 번째와 네 번째 단계를 반복하는 것은 난 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);
}

추천

출처blog.csdn.net/smilezyf/article/details/92396074