博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

第三次作业

Posted on 2017-12-01 20:57  huang121  阅读(145)  评论(0)    收藏  举报

结对码云地址:https://gitee.com/NiuPiTangTang/work

一、个人学习进度条

 

代码行数(新增/累计)

博客字数(新增/累计)

学习时间(新增/累计)

重要成长

目标

1500行

9000字

150小时

了解JAVA程序设计

第十一周

100/100

800/800

15/15

学习标识符以及关键字和运算符,基本数据类型。

第十二周

100/200

1000/1800

15/30

面向对象程序设计类,域,方法,实例对象,继承性,多态性

第十三周

100/300

2000/3800

15/45

变量作用域范围以及修饰词。

第十四周

200/400

1500/5800

18/60

字符串和数组的应用

二、解题思路

把比prvot小的放在前面,比它大的放在后边。

快速排序采用的思想是分治思想。

 

快速排序是找出一个元素(理论上可以随便找一个)作为基准(pivot),然后对数组进行分区操作,使基准左边元素的值都不大于基准值,基准右边的元素值 都不小于基准值,如此作为基准的元素调整到排序后的正确位置。递归快速排序,将其他n-1个元素也调整到排序后的正确位置。最后每个元素都是在排序后的正 确位置,排序完成。所以快速排序算法的核心算法是分区操作,即如何调整基准的位置以及调整返回基准的最终位置以便分治递归。

 

三、代码部分

给定一组数列,使用快速排序的方法将数列按照由小到大的顺序对数组进行排序。数列为两名同学的学号相联,两个数为一组,如果遇到以0开头,则省略不写。如1501020551李四-1501020550张三,则序数列为{15,1,2,5,51,15,1,2,5,50}。

 

输出格式:

 

输出排序后的数列,以空格分隔。

输出样例:

 

1 1 2 2 5 5 15 15 50 51

public class Paixu{

     public static void main(String []args){
        System.out.println("Test:");
        int[] a = {15,1,2,5,21,15,1,2,5,22};
        int start = 0;
        int end = a.length-1;
        sort(a,start,end);
        for(int i = 0; i<a.length; i++){
            System.out.print(" "+a[i]);
         }
        
     }
     
     public static void sort(int[] a,int low,int high){
         int start = low;
         int end = high;
         int key = a[low];
         
         
         while(end>start){
             //从后往前比较
             while(end>start&&a[end]>=key)  //如果没有比关键值小的,比较下一个,直到有比关键值小的交换位置,然后又从前往后比较
                 end--;
             if(a[end]<=key){
                 int temp = a[end];
                 a[end] = a[start];
                 a[start] = temp;
             }
             //从前往后比较
             while(end>start&&a[start]<=key)//如果没有比关键值大的,比较下一个,直到有比关键值大的交换位置
                start++;
             if(a[start]>=key){
                 int temp = a[start];
                 a[start] = a[end];
                 a[end] = temp;
             }
         //此时第一次循环比较结束,关键值的位置已经确定了。左边的值都比关键值小,右边的值都比关键值大,但是两边的顺序还有可能是不一样的,进行下面的递归调用
         }
         //递归
         if(start>low) sort(a,low,start-1);//左边序列。第一个索引位置到关键值索引-1
         if(end<high) sort(a,end+1,high);//右边序列。从关键值索引+1到最后一个
     }
     
}

 

 

学习java感受:

自己学习java不是很好,通过结对考试,知道自己的不足,我认为1+1>2,一起研究比一个人更好的解决代码问题,使自己的考试更完善。我会改善自己的不足。