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