package sort_book_datastruction;
import java.util.Arrays;
/**
* 插入排序:主要是将待排序的元素插入到已经排好序的列表中,从而编程长度加1的有序表;
* 具体步骤:例如第i个元素是待排序的元素,则前i-1个元素是已经非递减排列的序列,将第i个元素插入到前面已经排好的序列中,
* 该元素从第i-1个元素进行比较,如果大于第i-1个元素,则直接插入;
* 如果小于,则第i-1的元素向后移一位,同时比较与第i-2元素的大小,依次向前比较,直到排在了正确的位置。
* 在比较之前,要将可能发生右移的待排序元素建立监视哨。
* @author Administrator
*/
public class InsertSort {
public void insertSort(int[] array){
int length = array.length;
for(int i = 1;i<length;++i){//i表示循环在哪一趟;
if(array[i]<array[i-1]){
int j = i-1;
int key = array[i];//key待排序元素
while(j>=0 && array[j]>key){
array[j+1] =array[j];
j--;
}
array[j+1] = key;
}
}
}
/**
* 折半插入排序
* @param array
*/
public void insertSort2(int[] array){
int length = array.length;
for(int i =1;i<length;i++){
if(array[i-1]>array[i]){
int key = array[i];//待插入元素
int j = i-1;
int low = 0,high = j;
while(low<=high){
int m = (high - low)/2+low;
if(key<array[m]) high = m-1;
else low = m+1;
}
while(j>=high+1){
array[j+1] = array[j];
j--;
}
array[j+1]=key;
}
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
InsertSort is = new InsertSort();
int[] a={8,2,5,3,8,11,6,15,9,45,7,5};
is.insertSort(a);
//is.insertSort2(a);
System.out.println(Arrays.toString(a));
}
}
[java]插入排序及折半插入排序
最新推荐文章于 2022-02-05 13:42:47 发布