标签:style blog http color ar strong for 数据 div
转自http://blog.csdn.net/cjf_iceking/article/details/7916194
在冒泡排序、选择排序编写代码之后,楼主渐渐找到了coding的信心,熟能生巧,就像写词唱曲之前,都得先背诵大量的诗词,熟悉各路歌曲,才能走出自己的路线,有自己的杰作。好吧,来让楼主继续进行"社会主义初级阶段"的任务,这次是插入排序。
插入排序:插入即表示将一个新的数据插入到一个有序数组中,并继续保持有序。例如有一个长度为N的无序数组,进行N-1次的插入即能完成排序;第一次,数组第1个数认为是有序的数组,将数组第二个元素插入仅有1个有序的数组中;第二次,数组前两个元素组成有序的数组,将数组第三个元素插入由两个元素构成的有序数组中......第N-1次,数组前N-1个元素组成有序的数组,将数组的第N个元素插入由N-1个元素构成的有序数组中,则完成了整个插入排序。
以下面5个无序的数据为例:
65 27 59 64 58 (文中仅细化了第四次插入过程)
第1次插入: 27 65 59 64 58
第2次插入: 27 59 65 64 58
第3次插入: 27 59 64 65 58
第4次插入: 27 58 59 64 65
平均时间复杂度:O(n2)
空间复杂度:O(1) (用于记录需要插入的数据)
稳定性:稳定
/******************************************************** *函数名称:InsertSort *参数说明:pDataArray 无序数组; * iDataNum为无序数据个数 *说明: 插入排序 *********************************************************/ void InsertSort(int* pDataArray, int iDataNum) { for (int i = 1; i < iDataNum; i++) //从第2个数据开始插入 { int j = 0; while (j < i && pDataArray[j] <= pDataArray[i]) //寻找插入的位置 j++; if (j < i) //i位置之前,有比pDataArray[i]大的数,则进行挪动和插入 { int k = i; int temp = pDataArray[i]; while (k > j) //挪动位置 { pDataArray[k] = pDataArray[k-1]; k--; } pDataArray[k] = temp; //插入 } } }
/******************************************************** *函数名称:InsertSort *参数说明:pDataArray 无序数组; * iDataNum为无序数据个数 *说明: 插入排序 *********************************************************/ void InsertSort(int* pDataArray, int iDataNum) { for (int i = 1; i < iDataNum; i++) //从第2个数据开始插入 { int j = i - 1; int temp = pDataArray[i]; //记录要插入的数据 while (j >= 0 && pDataArray[j] > temp) //从后向前,找到比其小的数的位置 { pDataArray[j+1] = pDataArray[j]; //向后挪动 j--; } if (j != i - 1) //存在比其小的数 pDataArray[j+1] = temp; } }
标签:style blog http color ar strong for 数据 div
原文地址:http://www.cnblogs.com/hdu-edu/p/3989109.html