Sam大叔
"if you ever want something badly,let it go.if it comes back to you,then it's yours forever.if it doesn't,then it was never yours to begin with."

导航

 

算法描述

一般来说,插入排序都采用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 }

 

posted on 2012-12-28 11:59  Sam大叔  阅读(454)  评论(0)    收藏  举报