クイックソートのアルゴリズムに基づきます

クイックソートアルゴリズムの核となるアイデアは、この小さな値よりも右の「スロー」は左に、この値よりも大きい値に設定されている「スローを。」
アレイ工程のクイックソート:

  1. 2つの変数をi、jは、ソートの先頭に設定した:i = 0、J = N-1;(nはソートの数)
  2. 変数キーに割り当てられた比較値として配列内の最初の要素で、すなわち、キー= [0]。
  3. jから前進1検索、即ち、前後に(-j)、最初のキー値[J]、[J]と[i]は交換可能である未満である見つけます。
  4. 次いで、(++ i)を前後、最初の値を検索するためのキーよりも大きいから、バックI、すなわちから検索[i]は、[i]と[j]は交換可能です。
  5. 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);
}

おすすめ

転載: blog.csdn.net/smilezyf/article/details/92396074