关于插入排序的问题
import java.util.Arrays;
public class TestSort {
//插入排序
//时间复杂度:O(N^2)
//空间复杂度:O(1)
//稳定排序
public static void insertSort(int[] array){
//通过bound来划分出两个空间
//[0,bound)已排序区间
//[bound,size)待排序区间
for(int bound=1;bound<array.length;bound++){
int v=array[bound];
int cur=bound-1;//已排序区间的最后一个元素下标
for(;cur>=0;cur--){
if(array[cur]>v){
array[cur+1]=array[cur];
}else {
//此时说明已找到合适的位置
break;
}
}
array[cur+1]=v;//cur比v小情况
}
}
//希尔排序
//先分组,针对每个组进行插入排序,逐渐缩小小组的个数,最终整个数组接近有序
//稳定性:不稳定
//时间复杂度:O(N^1.3)
public static void shellSort(int[] array){
int gap=array.length/2;
while (gap>1){
//循环进行分组插排
insertSortGap(array,gap);
gap=gap/2;
}
insertSortGap(array,1);
}
private static void insertSortGap(int[] array,int gap){
for(int bound=gap;bound<array.length;bound++){
int v=array[bound];
int cur=bound-gap;//已排序区间的最后一个元素下标
for(;cur>=0;cur-=gap){
if(array[cur]>v){
array[cur+gap]=array[cur];
}else {
//此时说明已找到合适的位置
break;
}
}
array[cur+gap]=v;//cur比v小情况
}
}
public static void main(String[] args) {
int arr[]={9,5,2,7,3,6,8};
insertSort(arr);
System.out.println(Arrays.toString(arr));
}
}