接着昨天,排序算法-》简单插入排序。
简单插入排序算法原理:从整个待排序列中选出一个元素插入到已经有序的子序列中去,得到一个有序的、元素加一的子序列,直到整个序列的待插入元素为0,则整个序列全部有序。
在实际的算法中,我们经常选择序列的第一个元素作为有序序列(因为一个元素肯定是有序的),我们逐渐将后面的元素插入到前面的有序序列中,直到整个序列有序。
示意图如下:
不多说了,直接上代码,有图有代码哈(里面都有注释)
1 #include <stdio.h> 2 3 /* 4 copyright@wunaihualuo 5 直接插入排序: 6 直接插入排序就是从待排序列中选出一个元素,插入到已经有序的元素之中,直到所有的元素都插入到有序序列中所有的元素就全部 7 有序了。 8 通常的做法就是将第一个元素看做是有序的元素(即待排序列的第一个元素看做是有序序列),然后我们将第二个元素和有序序列(即 9 第一个元素)作比较,按正确的序列插入到序列中去。然后在将第三个元素和前面有序序列(即整个待排序列的前两个元素)作比较,将第 10 三个插入到前两个元素中去,使得前三个元素有序。以此类推,直到所有的元素都有序。 11 */ 12 13 void insertSort(int *arr[],int len); 14 15 int main(int argc, char *argv[]) 16 { 17 int arr[5]={ 18 3,89,72,43,1 19 }; 20 insertSort(arr,5); 21 int i; 22 for(i=0;i<5;i++){ 23 printf("%d ",arr[i]); 24 } 25 return 0; 26 } 27 28 /* 29 简单插入排序函数 30 */ 31 void insertSort(int *arr[],int len){ 32 int i; 33 int j; 34 int temp; //定义一个临时变量,用于交换数据时存储 35 for(i=1;i<len;i++){ //因为我们要对该待排序列的每一个元素都和前面的已排好序的序列进行插入,所以我们会对序列进行遍历 36 for(j=0;j<i;j++){ //第二层循环主要用于对已排好序的序列进行扫描,和要插入进来的数据进行逐一比较,然后决定插入到哪里 37 if(arr[j]>arr[i]){//从前往后对已排好序的元素和待插入元素进行大小比较,然后直到找到一个元素比被插入元素大,则交换位置 38 temp=arr[i]; 39 arr[i]=arr[j]; 40 arr[j]=temp; 41 } 42 } 43 } 44 }
本文系博主原创,转载请标明出处。