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

java编程题:用Java实现一个插入排序算法

2017-03-22 23:15 211 查看
import java.util.Arrays;

/**
* java编程题:用Java实现一个插入排序算法
*
* 基本思想:
* 	在要排序的一组数中,假定前n-1个数已经排好序,现在将第n个数插到前面的有序数列中,使得这n个数也是排好顺序的。如此反复循环,直到全部排好顺序。
*/
public class Test13 {

public static void main(String[] args) {
int[] sortNum = {12,33,28,86,15,62,9,38};				//定义数组
System.out.println("排序前:");
System.out.println(Arrays.toString(sortNum));			//排序前

insertSort(sortNum);									//开始排序

System.out.println("排序后:");
System.out.println(Arrays.toString(sortNum));			//排序后
}

/**
* 插入排序方法
* @param sortNum
*/
private static void insertSort(int[] sortNum){
int len = sortNum.length;								// 获取数组长度,为了更高效,从for循环外获取数组长度
int j = 0;
int temp = 0;

/*
//写法1
for (int i = 1; i < len; i++) {							// 从第二个元素开始,因为默认第一个元素是已经排好序的
temp = sortNum[i];									// 待插入的元素,在第二个for循环中此值不能变的
for (j = i; j > 0 && temp < [j-1]; j--) {	// 如果前一个元素大于待插入元素,则将前面的值后移
sortNum[j] = sortNum[j-1];						// 交换位置
}
sortNum[j] = temp;
}
*/

//写法2
for (int i = 1; i < len; i++) {							// 从第二个元素开始,因为默认第一个元素是已经排好序的
temp = sortNum[i];									// 待插入的元素,在下面的for循环中此值不能变的
for (j = i; j > 0; j--) {
if(sortNum[j-1] > temp){						// 如果前一个元素大于待插入元素,则将前面的值后移
sortNum[j] = sortNum[j-1];					// 交换位置
}else{
break;
}
}
sortNum[j] = temp;
}

/*
//写法3
for (int i = 1; i < len; i++) {							// 初始是从第二个元素开始的,因为默认第一个元素是已经排好序的
temp = sortNum[i];  								// 抽出待插入的元素,在下面的while循环中此值是不能变的
j = i;          									// 记录待插入的元素对应的索引。此索引要从后向前逐一对比。如果前一个元素大于待插的,那么将向移动一位
while (j > 0 && (sortNum[j - 1] > temp)) {
sortNum[j] = sortNum[j - 1];  					// 向后移动一位
j--;                  							// 同时索引向前减一
}
sortNum[j] = temp;									// 一直到第一个元素或者遇到小于待插入的元素时,跳出while循环,此时j便是待插入的元素的位置索引
}
*/

/*
//写法4,容易理解,有点像冒泡排序的写法
for(int i = 1 ; i < len; i++){
for(j = i; j > 0; j--){
if(sortNum[j] < sortNum[j - 1]){
temp = sortNum[j];
sortNum[j] = sortNum[j - 1];
sortNum[j - 1] = temp;
}else{
break;//不需要交换,直接跳出循环
}
}
}
*/
}

}

参考: http://www.cnblogs.com/0201zcr/p/4764427.html http://www.cnblogs.com/xiaoming0601/p/5862793.html http://www.cnblogs.com/xiaoduc-org/p/5745880.html http://blog.csdn.net/ouyang_peng/article/details/46547091 http://blog.csdn.net/lovoo/article/details/51755695 http://blog.csdn.net/qy1387/article/details/7752973
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐