排序算法之插入排序

来源:互联网 发布:c语言中的完全数 编辑:程序博客网 时间:2024/05/20 18:18

插入排序

      插入排序法的排序思想就是从数组的第二个元素开始,将数组中的每一个元素按照规则插入到已排好序的数组中以达到排序的目的.一般情况下将数组的第一个元素作为启始元素,从第二个元素开始依次插入.由于要插入到的数组是已经排好序的,所以只是要从右向左找到比插入点(下面程序中的insertNote)小(对升序而言)的第一个数组元素就插入到其后面.直到将最后一个数组元素插入到数组中,整个排序过程就算完成.
    稳定性:稳定的。
    时间复杂度:O(n2)。


       简单来说:

        插入排序算法是一个对少量元素进行排序的有效算法。插入排序的工作原理与打牌时整理手中的牌的做法类似,开始摸牌时,我们的左手是空的,接着一次从桌上摸起一张牌,并将它插入到左手的正确位置。为了找到这张牌的正确位置,要将它与手中已有的牌从右到左进行比较,无论什么时候手中的牌都是排序好的。


例如:现在我们要用插入算法把数组A={5,2,4,6,1,3},

实现升序排序:



实现代码仅供参考:

<span style="font-size:18px;">public class InsertSort {public static void insertSort(int a[]){int length=a.length; //数组长度int j; //当前值的位置int i; //指向j之前的位置int key; //当前要进行插入排序的值//从数组的第二个位置开始遍历值for(j=1;j<length;j++){key=a[j];i=j-1;//a[i]比当前值大时,a[i]后移一位,空出i的位置,好让下一次循环的值后移while(i>=0 && a[i]>key){a[i+1]=a[i]; //将a[i]值后移i--;    //i前移}//跳出循环(找到要插入的中间位置或已遍历到0下标)a[i+1]=key;    //将当前值插入}}public static void main(String[] args) {// TODO Auto-generated method stubint[] arrs = {5,2,4,6,1,3};insertSort(arrs);for(int a :arrs){System.out.print(a+" ");}}}</span>

显示结果:1 2 3 4 5 6 

降序排序:

<span style="white-space:pre"></span>public static void selectSort1(int[] nums){int length = nums.length;int j; //记录当前值的位置int i; //记录指向当前值的前一个值位置int key; //记录当前要插入的值//a[i]比当前值小时,a[i]后移一位,空出i的位置,好让下一次循环的值后移for(j=1;j<length;j++){i = j-1;key = nums[j];while(i>=0 && nums[i]<key){  //跟升序差不多的,就是在比较时候不用而已nums[i+1] = nums[i];i--;}nums[i+1]=key;}}

0 0
原创粉丝点击