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
相关文章推荐
- java编程题:用Java实现一个归并排序算法
- java编程题:用Java实现一个简单选择排序算法
- java编程题:写代码实现一个StackOverFlowError和OutOfMemoryError
- java编程题:用Java实现一个希尔排序算法
- java编程题:用Java实现一个堆排序算法
- 用 Java 实现一个插入排序算法
- 2016腾讯笔试编程题java实现求一个数等于两个质数的和的组合数(2016-09-11 19:00)
- java编程题:用Java实现一个冒泡排序算法
- java编程题:用Java实现一个快速排序算法
- 网易2015编程题(一用Java实现一个多线程程序将这个10000个数输出到5个不用文件中)
- 一个用Dijkstra算法实现的路由算法的java程序——6 STDijkstraAdv类
- 一个用Dijkstra算法实现的路由算法的java程序——5 GraphShow类
- 推荐一个关于AOP的AOP@WORK的专栏作者的AOP专题系列文章,主要关于Java下的AOP实现,毕竟Java下的AOP实现确实要比.Net下成熟得多,共12篇
- 一个用Dijkstra算法实现的路由算法的java程序——9 图信息文件示例
- 在Java applet中如何实现一个模式对话框?
- 用JSP+Javabean+Servlet实现一个投票系统
- 一个用Dijkstra算法实现的路由算法的java程序——3 STDijkstra类
- 推荐一个关于AOP的AOP@WORK的专栏作者的AOP专题系列文章,主要关于Java下的AOP实现,毕竟Java下的AOP实现确实要比.Net下成熟得多,共12篇
- 一个实现MD5的简洁的java类
- 一个实现MD5的简洁的java类