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

Posted bowenqianngzhibushiwo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了直接插入排序/二分插入排序/希尔排序相关的知识,希望对你有一定的参考价值。

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

插入排序是在源数据已经有序的情况下进行排序。时间复杂度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     

 

以上是关于直接插入排序/二分插入排序/希尔排序的主要内容,如果未能解决你的问题,请参考以下文章

八大内部排序算法之希尔堆排序插入排序算法

算法插入排序——希尔排序+直接插入排序

从直接插入排序到希尔排序

插入排序(直接插入排序折半插入排序希尔排序的算法思想及代码实现)

算法3 七大排序之:直接插入排序和希尔排序

第三篇,插入排序算法:直接插入排序希尔排序