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
/**
* 升序排序——插入排序
* @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
相关文章推荐
- 利用java实现数据结构中常用的插入排序和快速排序算法
- 冒泡排序、选择排序、插入排序、快速排序算法的时间性能分析(java实现)
- java实现插入排序
- java 实现 冒泡排序、选择排序、插入排序。
- Java实现二分插入排序
- 利用java实现数据结构中常用的插入排序和快速排序算法
- 几种常用的排序算法的分析及java实现(希尔排序,堆排序,归并排序,快速排序,选择排序,插入排序,冒泡排序)
- 算法导论Java实现-二分插入排序(习题2.3-6)
- 算法导论Java实现-插入排序
- java实现快速排序、插入排序、选择排序、冒泡排序算法
- JAVA排序算法实现代码-插入排序
- java实现插入排序
- java实现插入排序
- java实现插入排序
- 【排序系列】插入排序java实现
- 利用java实现数据结构中常用的插入排序和快速排序算法
- 《算法导论的Java实现》 1_1.1 插入排序
- Java实现排序(快速排序、冒泡排序、选择排序、基数排序、插入排序)
- Java实现插入排序
- 冒泡排序、选择排序、插入排序(Java实现)