直接插入排序(Insertion Sort)的基本思想是:每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子序列中的适当位置,直到全部记录插入完成为止。
这个算法比较简单,不需要过多的解释,代码如下:
1 /* 2 * insert the value which is at the index index in data 3 */ 4 void insert_sort(int *data, int index, int value) 5 { 6 int temp_index = index; 7 for(int i = 0;i < index;++i) 8 { 9 //find the first value that bigger than the passed value 10 if(value < data[i]) 11 { 12 temp_index = i; 13 break; 14 } 15 } 16 17 int temp = index; 18 while(temp > temp_index) //right shift one number from the temp_index 19 data[temp] = data[--temp]; 20 data[temp_index] = value; 21 }
以下是测试:
1 int main() 2 { 3 // int data[] = {3,2,6,1,30,-3}; 4 int data[] = {5,4,3,2,1,0}; 5 int length = 6; 6 for(int i = 1;i < length;++i) 7 insert_sort(data,i,data[i]); 8 9 for(int i = 0;i < length;++i) 10 cout << data[i] << " "; 11 cout << endl; 12 return 0; 13 }
结果如下: