插入排序
排序思路:插入排序,即插入有序队列。在遍历有序队列,当遍历到的数据和带排序的数据相等,或者刚好比带排序大 ,此时插入带排序的数据,插入后自然还是有序队列。
如:{12,1,12,3,4}。排序过程如下,红色为找到因该插入的位置。橙色为已经排好序的部分。
- 初始的时候,假设有序队列为{12}
- 当第一次排序的时候,“1” 需要找到自己插入的位置,即和{12}比较,插入到12前面,有序队列为{1,12}
- 当第二次排序的时候,“12” 需要在{1,12}找到需要插入的位置,即插入到12的前面{1,12,12}
- 当第三次排序的时候,“3”需要在{1,12,12}中找到需要插入的为,即插入到12前面{1,3,12,12}
- 当第四次排序的时候,“4”需要在{1,2,12,12}找到需要插入的位置,即插入到12前面{1,3,4,12,12}
每次寻找插入位置的时间为O(N),寻找次数N。所以时间复杂度为:O(N*N)。该算法是稳定的排序算法。
1 C++: 2 #include <iostream> 3 using namespace std; 4 namespace mySort 5 { 6 voidinsertSort(int * ar, int len) 7 { 8 inttemp = -1; 9 for(int i = 0; i < len - 1; ++i) 10 { 11 intj = i + 1; 12 temp= ar[j]; 13 while(j>0) 14 { 15 if(temp < ar[j - 1]) 16 { 17 ar[j]= ar[j - 1]; 18 --j; 19 } 20 else 21 break; 22 } 23 ar[j]= temp; 24 } 25 } 26 };