直接插入排序

来源:互联网 发布:淘宝代销编辑宝贝品牌 编辑:程序博客网 时间:2024/06/15 23:18

直接插入排序是在本数组中,从第二个元素开始,将其与第一个元素进行比较,如果比第一个元素大的话,不动进行第三个元素的排序,如果比第一个元素小就将第一个元素后移一位,将第二个元素插入到第一,然后进行第三个元素的比较......


//若当前数目比前面元素小的话,先通过循化来找到这个数字应该在此次循环中所排的位置,然后再通过循环将元素依次进行后移,将该数插入到指定位置。

void directInsert2(int *arr, int lenth){if (arr == NULL) return;for(int i=1; i<lenth; ++i){int tmp = arr[i];int j=i-1;for( ; j>-1; --j){if (arr[j]<tmp)     break;}int num = i;while(num > j+1){arr[num] = arr[num-1];num--;}arr[num] = tmp;}}


//用当前元素与前面元素进行比较,如果比前面元素小的话,就与之交换数值,然后再判断其与当前位置的前一位的大小,如果小的话进行交换,直至找到比前面位置数值小的位置停止比较...

void insert_dirc1(int *arr, int len)//比较一次移动一次
{for(int i=1; i<len; i++){int num = i;while(num>0){if (arr[num] < arr[num-1]){swap(&arr[num], &arr[num-1]);}else{break;}num--;}}}


插入排序适合基本有序的数组的排序,如果数组中的数值基本有序,则数值需交换次数很少。但是如果按从大到小排序,而数组初值是从小到大,那该次排序的效率将达到最差,其移动的次数是:n, n-1,n-2,......3,2,1。其时间复杂度则将接近于O(N*N)。希尔排序就是将数组中的值均匀的分散,使其先达到基本有序,然后再对其整体进行插入排序。





0 0
原创粉丝点击