「ソートの挿入」--ソートの直接挿入
1515 ワード
「ソートの挿入」--直接ソート
基本的な考え方:最初から順番に並べられているのは1つの要素だけで、並べ替えられる要素には残りのすべての要素が含まれています.ソートする要素を取り出し、順序付けされたシーケンスに挿入する操作を繰り返します.ソートする要素が挿入されるまで.
挿入方法:挿入する要素を順序付けされたシーケンスと比較し、挿入する要素がソートする次の要素より小さい(より大きい)まで前(後)にシフトします.
C++コード実装:
基本的な考え方:最初から順番に並べられているのは1つの要素だけで、並べ替えられる要素には残りのすべての要素が含まれています.ソートする要素を取り出し、順序付けされたシーケンスに挿入する操作を繰り返します.ソートする要素が挿入されるまで.
挿入方法:挿入する要素を順序付けされたシーケンスと比較し、挿入する要素がソートする次の要素より小さい(より大きい)まで前(後)にシフトします.
C++コード実装:
#include<iostream>
#include<time.h>
using namespace std;
template<class Type> struct ElementType
{
Type key;
};
template<class Type> struct SqList
{
ElementType<Type>* elem;
int length;//
int listsize;//
};
template<class Type> void insertSort(SqList<Type>& List)
{
//
for (int i = 2; i < List.length; i++)
{
// ,
if (List.elem[i].key < List.elem[i-1].key)
{
List.elem[0] = List.elem[i];
// ,
int j = i - 1;
for (; List.elem[0].key < List.elem[j].key; j--)
List.elem[j + 1] = List.elem[j];
List.elem[j + 1] = List.elem[0];
}
}
}
void main()
{
SqList<int> List;
List.length = 0;
List.listsize = 20;
List.elem = new ElementType<int>[List.listsize];
//
for (int i = 1; i < 10; i++)
{
srand(time(0)+i*10000);
List.elem[i].key = rand() % 50;
List.length++;
}
for (int i = 1; i < List.length; i++)
cout << List.elem[i].key << ' ';
cout << endl;
//
insertSort(List);
cout << "Sorted: " << endl;
for (int i = 1; i < List.length; i++)
cout << List.elem[i].key << ' ';
cout << endl;
system("pause");
}