码迷,mamicode.com
首页 > 编程语言 > 详细

直接插入排序/二分插入排序/希尔排序

时间:2019-10-03 16:32:13      阅读:83      评论:0      收藏:0      [点我收藏+]

标签:直接   shellSort   数组   class   插入排序   swap   nbsp   ||   public   

---恢复内容开始---

插入排序是在源数据已经有序的情况下进行排序。时间复杂度O(N^2),稳定的

直接插入排序

代码如下

public static int[] insertSort(int [] a){
if(a==null||a.length==0){
return a;}
for(int i=1;i<a.length;i++){

for(int j=i-1;j>=0&&a[j]>a[j+1];j--)
  swap(a,j,j+1);//满足前一个大于后一个才进行交换
}
return a; }

二分插入   前提也是原数组是有序的

 

public static int[] subInser(int a[]) {
        for (int i = 1; i < a.length; i++) {
            int temp = a[i];
            int low = 0, high = i - 1;
            int mid = -1;
            while (low <= high) {
                mid = low + (high - low) / 2;
                if (a[mid] > temp) {
                    high = mid - 1;
                } else { // 元素相同时,也插入在后面的位置                
                    low = mid + 1;
                }
            }
            for (int j = i - 1; j >= low; j--) {
                a[j + 1] = a[j];
            }
            a[low] = temp;
        }
        return a;
    }

希尔排序

不再是固定的二分,分段数d在不断的缩小,直到为1

 1  public static int[] shellsort(int [] a){
 2         int d=a.length/2;
 3         int tmp;
 4         while(d>0){
 5             for(int i=d;i<a.length;i++){
 6                 tmp=a[i];
 7                 int j=i;
 8                 while(j>d&&tmp<a[j-d]){
 9                     a[j]=a[j-d];
10                     j-=d;
11                 }
12                 a[j]=tmp;
13             }
14             d=d/2;
15         }
16      return  a;
17     }

 

直接插入排序/二分插入排序/希尔排序

标签:直接   shellSort   数组   class   插入排序   swap   nbsp   ||   public   

原文地址:https://www.cnblogs.com/bowenqianngzhibushiwo/p/11619895.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!