因为学校考试以及毕设的事情有一段时间没有更新博客了,一直想把之前的知识整理一遍,这次是对八种排序算法的整理。
基本概念:对于给定的一组记录,初始时假定第一个记录自成一个有序的序列,其余的记录为无序序列;接着从第二个记录
开始,按照记录的大小依次将当前处理的记录插入到其之前的有序序列中,直至最后一个记录插入到有序序列为止。
稳 定 性:稳定
时间复杂度: O(n^2)
(1)初始数据正序,总比较次数:n-1
(2)初始数据逆序,总比较次数:(n2+n-1)/2=O(n2)
(3)初始数据无序,第i趟平均比较次数(i+1)/2,总次数为:(n2+3n)/4=O(n2)
(4)可见,原始数据越趋向正序,比较次数和移动次数越少。
1 #include <iostream> 2 3 using namespace std; 4 5 void InsertSort(int par_array[], int array_size) 6 { 7 int i, j; 8 int temp; 9 10 for (i = 1; i < array_size; i++) 11 { 12 temp = par_array[i]; 13 14 for (j = i - 1; j >= 0; j--) 15 { 16 if (temp < par_array[j]) 17 { 18 par_array[j + 1] = par_array[j]; 19 } 20 else 21 { 22 break; 23 } 24 } 25 par_array[j + 1] = temp; 26 } 27 } 28 29 int main() 30 { 31 int i = 0; 32 int a[] = {3, 5, 2, 1, 9, 0, 6, 4, 7, 8}; 33 int length = sizeof(a) / sizeof(a[0]); 34 35 InsertSort(a, length); 36 37 for (i = 0; i < length; i++) 38 { 39 printf("%d ", a[i]); 40 } 41 42 while(1); 43 44 return 0; 45 }