结对码云地址: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,一起研究比一个人更好的解决代码问题,使自己的考试更完善。我会改善自己的不足。
浙公网安备 33010602011771号