ソートアルゴリズム:5.挿入ソートの直接挿入ソート(二分法を含む)
挿入ソート
すべてのレコードの挿入が完了するまで、テーブルの適切な位置.2種類の挿入ソート方法を紹介する:(1)直接挿入ソート(二分挿入ソートを含む)(2)ヒルソート
ソート1を直接挿入する.配列R[0..n-1]にソートするレコードが格納されているものとする.並べ替えプロセスのある中間時点において、Rは、2つのサブ区間R[0..i-1]およびR[i..n-1]に分割され、ここで、
3.直接挿入ソートの基本動作は、現在の無秩序領域の1番目のレコードR[i]を秩序に挿入することである
領域R[0..i-1]の適切な位置で、R[0..i]を新しい秩序領域に変更する. 4.直接挿入ソートは、順序付け領域を1レコードずつ増加させるため、増分法と呼ばれることが多い.
挿入ソート
すべてのレコードの挿入が完了するまで、テーブルの適切な位置.2種類の挿入ソート方法を紹介する:(1)直接挿入ソート(二分挿入ソートを含む)(2)ヒルソート
ソート1を直接挿入する.配列R[0..n-1]にソートするレコードが格納されているものとする.並べ替えプロセスのある中間時点において、Rは、2つのサブ区間R[0..i-1]およびR[i..n-1]に分割され、ここで、
3.直接挿入ソートの基本動作は、現在の無秩序領域の1番目のレコードR[i]を秩序に挿入することである
領域R[0..i-1]の適切な位置で、R[0..i]を新しい秩序領域に変更する. 4.直接挿入ソートは、順序付け領域を1レコードずつ増加させるため、増分法と呼ばれることが多い.
//
void insertsort(int a[], int n)
{
int i, j;
int temp;
for (i = 1; i < n; ++i)
{
temp = a[i];
j = i -1;
while (j >= 0 && temp < a[j])
{
a[j + 1] = a[j];
j--;
}
a[j + 1] = temp;
}
}
//
void insertsort1(int a[], int n)
{
int i, j, low, high, mid;
int temp;
for (int i = 1; i < n; ++i)
{
temp = a[i];
low = 0;
high = i - 1;
//
while (low <= high)
{
mid = (low + high) / 2;
if (temp < a[mid])
high = mid - 1;
else
low = mid + 1;
}
//
for (j = i -1; j >= high + 1; j--)
a[j + 1] = a[j];
a[high + 1] = temp;
}
}
void main()
{
int a[] = { 15,2,0,9,4,5,6,7 };
int n = sizeof(a) / sizeof(int);
//insertsort(a, n);
insertsort1(a, n);
for (int i = 0; i < n; i++)
{
cout << a[i] << " ";
}
cout << 1 / 2 << endl;
}