您的位置:首页 > 其它

直接插入排序

2016-01-18 14:23 281 查看
//这是我自己写的直接插入排序,直接插入排序的思想就是  以第一个数为基准,把后边的数,插入到前边已经排好序的适当位置上,直到整个有序,稳定排序,时间复杂度为O(n^2)
public class insertsort {

    public static void main(String args[]){

        int[] array={34,3,53,2,23,7,14,10};

        insertsort(array);

        for(int a:array)

            System.out.print(a+" ");

    }

    private static void insertsort(int[] nums){

        int len=nums.length;

        if(len<2)   return;

        for(int i=1;i<len;++i){ //从第二个元素开始,进行插入

            for(int j=0;j<i;++j){  //插入的元素要和它前边已经排好序的进行比较

                if(nums[i]<nums[j]){ //如果小于,则进行插入

                    int temp=nums[i]; //保存待插入的元素

                    for(int k=i;k>j;--k) //顺序把要插入位置后边的元素往后移动一位

                        nums[k]=nums[k-1];

                   nums[j]=temp;

                }

            }

        }

    }

}

//直接插入排序,直接插入排序的思想就是,以第一个数为基准,把后边的数, 插入到前边已经排好序的适当位置上,直到整个有序,稳定排序,时间复 杂度为O(n^2)

public class insertsort {

    public static void main(String args[]){

        int[] array={34,3,53,2,23,7,14,10};

        insertsort(array);

        for(int a:array)

            System.out.print(a+" ");

    }

    private static void insertsort(int[] nums){

        int len=nums.length;

        if(len<2)   return;

        for(int i=1;i<len;++i){ //从第二个元素开始,进行插入

            if(nums[i]<nums[i-1]){ //倒着进行比较,如果大于最后一个,则不做变动

                int temp=nums[i],j;//如果小于最后一个,则从后往前进行比较

                for (j = i - 1; j >= 0 && nums[j] > temp; j--)

                    nums[j+1]=nums[j];//这个for语句实现了元素的后移

                nums[j+1]=temp;//插入元素

            }

        }

    }

}

//直接插入排序,直接插入排序的思想就是  以第一个数为基准,把后边的数,插入到前边已经排好序 的适当位置上,直到整个有序,稳定排序,时间复杂度为O(n^2)
public class insertsort {

    public static void main(String args[]){

        int[] array={34,3,53,2,23,7,14,10};

        insertsort(array);

        for(int a:array)

            System.out.print(a+" ");

    }

    private static void insertsort(int[] nums){

        int len=nums.length;

        if(len<2)   return;

        for(int i=1;i<len;++i){ //从第二个元素开始,进行插入

            for(int j=i-1;j>=0 && nums[j]>nums[j+1];--j){  //插入的元素要和它前边已经排好序的进行比较

                int temp=nums[j+1]; //用数据交换代替数据后移

                nums[j+1]=nums[j];

                nums[j]=temp;

            }

        }

    }

}


如果在插入的元素的时候,对于比较的操作,进行类似二分查找的思想应用的话,就叫做折半插入排序算法,在最坏情况下好于直接插入,在最好情况下坏与直接插入,平均时间复杂度为O(n^2)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: