ソート要約の挿入
5844 ワード
前言
1、挿入ソート(Insertion sort)の基本思想
1)ソートを挿入する基本思想:すべてのレコードの挿入が完了するまで、ソートされるレコードを1つずつキーワードサイズで前にソートされたサブファイルの適切な位置に挿入する.
2)挿入ソート方法の代表:直接挿入ソートとヒルソート
一、直接挿入ソート
1、並べ替えの基本思想を直接挿入する
配列R[1…n]にソートされたレコードが格納されているとする.初期時、R[1]は1つの秩序領域を形成し、無秩序領域はR[2.n]である.i=2からi=nまで順次R[i]を現在の秩序領域R[1…i-1]に挿入し、n個のレコードを含む秩序領域を生成する.
直接ソートを挿入する基本的な動作は、現在の無秩序領域の1番目の記録R[i]を秩序領域R[1...i-1]の適切な位置に挿入し、R[1...i]を新しい秩序領域にすることである.この方法は秩序領域を1レコード増加させるたびに,通常増分法と呼ばれるからである.
2、直接挿入ソートアルゴリズムの核心は、挿入するデータR[2…n]を準備する. は、条件を満たす場合に、挿入値テンソル空間(データ後方シフト) である.排出箇所に値 を挿入する.
3、直接挿入ソートアルゴリズムの実現
1、挿入ソート(Insertion sort)の基本思想
1)ソートを挿入する基本思想:すべてのレコードの挿入が完了するまで、ソートされるレコードを1つずつキーワードサイズで前にソートされたサブファイルの適切な位置に挿入する.
2)挿入ソート方法の代表:直接挿入ソートとヒルソート
一、直接挿入ソート
1、並べ替えの基本思想を直接挿入する
配列R[1…n]にソートされたレコードが格納されているとする.初期時、R[1]は1つの秩序領域を形成し、無秩序領域はR[2.n]である.i=2からi=nまで順次R[i]を現在の秩序領域R[1…i-1]に挿入し、n個のレコードを含む秩序領域を生成する.
直接ソートを挿入する基本的な動作は、現在の無秩序領域の1番目の記録R[i]を秩序領域R[1...i-1]の適切な位置に挿入し、R[1...i]を新しい秩序領域にすることである.この方法は秩序領域を1レコード増加させるたびに,通常増分法と呼ばれるからである.
2、直接挿入ソートアルゴリズムの核心
3、直接挿入ソートアルゴリズムの実現
void InsertSort(int *arr,int len)
{
int i,j; // i ,j i
int curValue; // i
for (i=1;i<len;i++) // arr[1], arr[2], arr[len-1]
{
if (arr[i]<arr[i-1])//
{
curValue = arr[i]; //
j = i-1; // i
do
{
arr[j+1] = arr[j]; // ,
j--;
} while (curValue<arr[j]); //
arr[j+1] = curValue; //
}
}
}
4、 ソートアルゴリズムの
ソートは、その でソートされ、 しています. ソートの はO(n), はO(n^2), はO(n^2)であった.
、ヒルソート(Shellsort)
1、ヒルソートの
まずn の を のインクリメンタルとして り,ファイルのすべての をグループに ける.すべての の のレコードは じグループに されます.まず、 グループ で ソートを います. に、2 のインクリメンタルを して、 したインクリメンタル、すなわち、すべてのレコードが じグループに されて ソートされるまで、 のグループおよびソートを り します.
まず、 する のシーケンス をいくつかのサブシーケンス( からなる)に して ソートし、 に を してソートし、シーケンス の が に ( が さい)されたときに、 の を ソートします. ソートは、 が に されている ( に い )に が いためです.
この は にパケット である.
2、ヒルソートアルゴリズムの インクリメンタルdの ソート 3.ヒルソートアルゴリズムの
n=10の 49,38,65,97,26,13,27,49,55,4を にとると
gap=10/2=5
49 38 65 97 26 13 27 49 55 4
1A 1B
2A 2B
3A 3B
4A 4B
5A 5B
1 A,1 B,2 A,2 Bなどはパケットタグであり, は じグループで, はそのグループのいくつかの であり, じグループのデータを してソートする.すなわち、5つのグループ(49,13)(38,27)(65,49)(97,55)(26,4)に けられ、 グループがソートされると(13,49)(27,38)(49,65)(55,97)(4,26)、 じになる.
2 のgap=5/2=2
ソート
13 27 49 55 4 49 38 65 97 26
1A 1B 1C 1D 1E
2A 2B 2C 2D 2E
3 のgap=2/2=1
4 26 13 27 38 49 49 55 97 65
1A 1B 1C 1D 1E 1F 1G 1H 1I 1J
4 のgap=1/2=0のソートが すると、 が られます.
4 13 26 27 38 49 49 55 65 97
4、ヒルソートアルゴリズムの void ShellSort(int a[], int n)
{
int d;
for (d=n/2; d>0; d=d/2) //
{
for (int i=d; i<n; i+=d)
{
if (a[i]<a[i-d])
{
int j = i-d;
int temp = a[i];
do
{
a[j+d] = a[j];
j = j-d;
} while (temp<a[j]&&j>=0);
a[j+d] = temp;
}
}
}
}
5、ヒルソートアルゴリズムの , O(nlogn), O(n^S)(1<S<2).
:http://blog.csdn.net/morewindows/article/details/6668714