算法描述
一般来说,插入排序都采用in-place在数组上实现。具体算法描述如下:
1. 从第一个元素开始,该元素可以认为已经被排序
2. 取出下一个元素,在已经排序的元素序列中从后向前扫描
3. 如果该元素(已排序)大于新元素,将该元素移到下一位置
4. 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置
5. 将新元素插入到该位置后
6. 重复步骤2~5
1 // 2 // s_insert.cpp 3 // 4 // Created by scandy_yuan on 12-12-27. 5 // Copyright (c) 2012年 Sam. All rights reserved. 6 // 7 8 #include <iostream> 9 using namespace std; 10 11 //插入排序算法实现函数 12 void s_insert(int data[],size_t size) 13 { 14 int temp;//保存取出的数 15 int i; 16 for (i=1; i<size; i++) { 17 temp = data[i];//从下标为1的位置开始取数 18 int j = i-1;//记录取出数的前一个数(有序的数)的下标 19 //从后往前循环比较 20 while((j>=0)&&(data[j]>temp)){ 21 //取出的数大于前面有序的数就将这个数移动到下一个位置 22 data[j+1] = data[j]; 23 //将有序的数的下标减一,即找到前一个位置有序的数的下标 24 j--; 25 } 26 //将取出的数放到正确位置。 27 data[j+1] = temp; 28 cout << "第" << i << "次排序结果:" << " "; 29 for(int k=0;k<size;k++) 30 cout << data[k] << "\t"; 31 cout << endl; 32 } 33 } 34 35 int main(int argc, const char * argv[]) 36 { 37 38 // insert code here... 39 //测试 40 int arr[10] = {2,1,5,4,3,9,8,7,6,0}; 41 s_insert(arr,10); 42 return 0; 43 }
浙公网安备 33010602011771号