直接插入排序及改进

来源:互联网 发布:淘宝内衣进货渠道 编辑:程序博客网 时间:2024/06/10 18:46

最近看了下排序,就把自己的学习过程记录下来

<span style="font-size:14px;">public class Sort1 {/* * 插入排序,在已经排序好的序列中,插入一个元素后,仍然排列有序 * 总体思路是查找要插入数字在数组中的位置,位置之前的数据不变,位置之后的数字下标加1 */public static void main(String[] args) {// 被插前的数组int[] m = new int[] { 1, 2, 3, 4, 5, 7, 8, 9 };// n是插入后的数组int[] n = new int[m.length + 1];// 要插入的数字int a = 6;for (int j = 0; j < m.length; j++) {if (a > m[j]) {n[j] = m[j];//当集合中的数小于a时,直接将集合中的m[j]赋值给n[j]}else{//当集合中出现m[j]大于a时,在n[j]放入a,将m[j]及其以后的数字赋值给n[j+1]n[j] = a;for (int l = j; l < m.length; l++) {n[l + 1] = m[l];}break;}}//遍历集合,查看排序情况for (int i = 0; i < n.length; i++) {System.out.print(n[i] + ",");}}}</span>
运行结果如下:

1,2,3,4,5,6,7,8,9


改进排序:

<span style="font-size: 24px;"></span><span style="font-size:14px;">public class Sort2 {public static void main(String[] args) {int temp;//定义临时变量,保存要交换的值int [] a ={32,22,54,76,8,21,43,23,41,34,};//随便建立一个无序数组for (int j = 1; j < a.length; j++) {//下面这个for循环对排序没有影响,只是为了方便观察数组是如何排序,在排序前遍历下数组for (int i = 0; i < a.length; i++) {System.out.print(a[i]+",");}System.out.println();//换行temp = a[j];/* * 下面for循环开始进行比较,按照从小到大排列 * 注意i一定比j小,j是外层循环,i是内层循环,a[i]在数组前面,a[j]在数组后面 * 首先是a[i]和a[j]比较,此时i=0,j=1,如果第一个大于第二个,则将第一个值,赋值给第二个 * 那第一个值怎么办呢?别急,下面有个a[k+1]=a[k];就是填补空缺的第一个值得 * 具体运行的过程是这样的:如果a[i]>a[j]时,就将a[j-1]的值移到a[j]上,把a[j-2]的值 * 移到a[j-1]上……,以此类推,把a[i]移到a[i+1]上,剩下的循环就可以break掉,因为循环内 * 已经是有序的了 *  */for (int i = 0; i < j; i++) {if (a[i]>temp) {//想实现从大到小排序,这里改为a[i]<tempfor (int k = j-1; k >=i; k--) {a[k+1]=a[k];}a[i]=temp;break;//终止第二层循环}}}//遍历下最终结果System.out.println("最终结果是:");for (int i = 0; i < a.length; i++) {System.out.print(a[i]+",");}}}</span>

运行结果:

32,22,54,76,8,21,43,23,41,34,
22,32,54,76,8,21,43,23,41,34,
22,32,54,76,8,21,43,23,41,34,
22,32,54,76,8,21,43,23,41,34,
8,22,32,54,76,21,43,23,41,34,
8,21,22,32,54,76,43,23,41,34,
8,21,22,32,43,54,76,23,41,34,
8,21,22,23,32,43,54,76,41,34,
8,21,22,23,32,41,43,54,76,34,
最终结果是:
8,21,22,23,32,34,41,43,54,76,


0 0
原创粉丝点击