基本的なアルゴリズムの高速なソート。
基本的な
-
1.参照番号(参照番号が使用されている)を設定します。
-
2.参照配列は中心に移動の数(左からは、それが正しい数よりも大きい少ないそれ以上である)です。
-
3.この配列の参照番号は、2つの部分、各部の動作の最初のステップで囲まれています。(思考の分割後のプロセスは、再帰を使用することが必要です)
-
4.終了し、出力
-
具体的な処理フロー図を参照してください。
難しさ
- シーケンスの真ん中にどのように参照番号?方法は次のとおりです。シーケンスの両端からセットは、jがときi、jは、彼らはローリングスタートの両端からあるそうという、二つの小さなボールで
以下参照ストップよりも数を満たして(必ずスクロールjに作る)は、そして私は、iとjの基準数よりも多い数満たさ
尖った要素は2個のボールは、2つのボール端部出会うまで続け交換素子ベースラインに向かって転がり、私は、ラウンドを指摘、スワップ終わり。 - アプリケーションのアイデア再帰。
まあ、私は、コードの最初の、そんなに言いました:
#include<stdio.h>
int n,a[101];//定义全局变量
void quicksort(int left,int right)
{
int i,j,temp,t;
if(left>right)
return;
t=a[left];//设定基准数
i=left;
j=right;
while(i!=j)
{
while(a[j]>=t&&i<j)//先让j移动
j--;
while(a[i]<=t&&i<j)//i再移动
i++;
//找到符合要求的两个元素,交换他们在数组中的位置
if(i<j)//当两个小球没有相遇时
{
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
//让基准数到达中间
a[left]=a[i];
a[i]=t;
//接下来重点来了
//递归思想的应用
quicksort(left,i-1);//继续处理左边的
quicksort(i+1,right);//继续处理右边的
return ;
}
int main ()
{
int i,j;
scanf("%d",&n);
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
quicksort(1,n);//快速排序函数调用
//输出结果
for(i=1;i<=n;i++)
printf("%d ",a[i]);
getchar();getchar();
return 0;
}
入力検証値
10
5 4 8 2 0 1 6 8 3 7
結果は以下の通りであります:
0 1 2 3 4 5 6 7 8 8
リマーク
-
だから、どのようにそれは小さな行に大きな?
nは1〜[I]配列の最後のステップを変更することは非常に簡単; iは++ 1からnまで変化; I-こと(非常に容易ではありません)
-
あなたの助けを期待した私自身の理解!