您的位置:首页 > 编程语言 > Java开发

Java实现插入排序

2014-09-06 21:34 190 查看
Cr:排序中的一类——插入排序

/**
* 升序排序——插入排序
* @author Aegis
*
*/
public class Sort {

//需要排序的数组,包含一个等于情况"6"
private int[] intArray = {9,17,5,6,4,2,1,6,8,7,11,13,14,3,10};

/**
* 直接插入排序
* @param args
*/
public void directInsertSort(){
for(int i=1; i<intArray.length; i++){
int temp = intArray[i];
int j;
for(j=i-1; j>=0&&intArray[j]>temp; j--){ //从有序部分的最后一位往前比较
intArray[j+1] = intArray[j]; //j位子空出
}
intArray[j+1] = temp; //之前有j--,所以+1
}
System.out.println("直接插入排序");
for(int i=0; i<intArray.length; i++)
System.out.println(intArray[i]);
}

/**
* 二分插入排序
* 采用二分查找方法寻找插入位置
* @param args
*/
public void binaryInsertSort(){
for(int i=1; i<intArray.length; i++){
int temp = intArray[i]; //记录要插入的数据
int low = 0; //设置有序部分的初始区间
int high = i-1;
int mid;
while(low <= high){
mid = (low+high)/2;
if(intArray[i]>intArray[mid])
low = mid+1; //插入位置在后半部分
else
high = mid -1; //插入位置在前半部分,包括等于的情况
}

for(int j=i-1; j>=high+1; j--){ //向后移动数据
intArray[j+1] = intArray[j]; //j是空出来的位子
}
intArray[high+1] = temp; //记录插入正确位置
}
System.out.println("二分插入排序");
for(int i=0; i<intArray.length; i++)
System.out.println(intArray[i]);
}

/**
* 希尔排序
* @param args
*/
public void shellInsertSort(){
int d[] = {5,3,1}; //步长序列
for(int k=0; k<d.length; k++){
int dk = d[k];
for(int i=dk; i<intArray.length; i++){ //dk是第1子队列的第二个元素,i表示第i个队列
int temp = intArray[i];
int j;
for(j=i-dk; j>=0&&intArray[j]>temp; j=j-dk){
intArray[j+dk] = intArray[j];
}
intArray[j+dk] = temp;
}
}
System.out.println("希尔排序");
for(int i=0; i<intArray.length; i++)
System.out.println(intArray[i]);
}

public static void main(String[] args) {
Sort directInsertSort = new Sort();
directInsertSort.directInsertSort();
System.out.println();

Sort binaryInsertSort = new Sort();
binaryInsertSort.binaryInsertSort();
System.out.println();

Sort shellInsertSort = new Sort();
shellInsertSort.shellInsertSort();
System.out.println();
}

}


打印结果:(其他两个同,由于是竖着打印就没有贴上来)
直接插入排序 

1

2

3

4

5

6

6

7

8

9

10

11

13

14

17
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息