第三次作业
本次作业两名同学的学号,本次作业GIT的提交地址:
1501020510石磊,1501020529裴龙
https://gitee.com/peiduoduo/kaohe2.git
一、个人学习进度条
|
|
代码行数(新增/累计) |
博客字数(新增/累计) |
学习时间(新增/累计) |
重要成长 |
|
目标 |
1500行 |
7000字 |
120小时 |
了解JAVA程序设计 |
|
第十一周 |
120/120 |
600/600 |
13/15 |
学习结构化设计FOR,WHILE,IF-ELSE语句。 |
|
第十二周 |
100/210 |
1100/1700 |
15/27 |
面向对象程序设计类,域,方法,实例对象,继承性,多态性 |
|
第十三周 |
120/320 |
2000/3500 |
13/40 |
变量作用域范围以及修饰词。 |
|
第十四周 |
250/300 |
1500/4800 |
22/60 |
字符串和数组的应用
|
二:代码部分和解题思路:
-
从序列中挑出一个元素,作为"基准"(pivot).
-
把所有比基准值小的元素放在基准前面,所有比基准值大的元素放在基准的后面(相同的数可以到任一边),这个称为分区(partition)操作。
-
对每个分区递归地进行步骤以上两步,递归的结束条件是序列的大小是0或1,这时整体已经被排好序了。
以下是具体代码及详细注释:
public class tiyi{
static void swap(int a[], int i, int j){ //定义交换两个数的方法 swap
int temp;
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
static int huaFen(int a[], int left, int right){ //定义分区方法,参数列表是数组a,整型left表示数组的上限,整型right表示数组的下限
int pivot = a[right];//声明分区基准pivot
int tail = left - 1;//声明tail为小于基准的子数组最后一个元素的索引
for (int i=left; i<right; i++){ //遍历除基准以外的所有元素
if (a[i] <= pivot){
swap(a, ++tail, i);//把小于等于基准的元素放到前一个子数组末尾
}
}
swap(a, tail+1, right); //最后把基准放到前一个子数组的后边,剩下的子数组既是大于基准的子数组
return tail + 1;//返回基准值
}
/***此方法用来多次递归调用本身,对每一次大于或小于基准的分区,进行再分区,直至最后一个数,排序结束**/
static void quickSort(int a[], int left, int right){//定义递归方法
if (left >= right)
return;//递归结束条件
int pivotIndex = huaFen(a, left, right);//此处为每次分区基准的索引
quickSort(a, left, pivotIndex - 1);//递归调用自己,实参为数组,数组下限,基准索引值减一
quickSort(a, pivotIndex+1, right);//递归调用,实参为索引,基准索引值加一,数组上限
}
public static void main (String args[]){
int a[] = {1,2,5,10,15,29};//声明数组
int length = a.length-1;//将数组最大的索引赋值给length,作为数组基准
quickSort(a, 0, length);
for (int i=0; i<a.length; i++){//遍历输出数组
System.out.print(" " + a[i]);
}
}
三 运行结果截图:

对本次考试总结
结对编程这种编程方式是我之前从来没有接触过的,一开始我对这种方法很抵触,因为我觉得每个人的想法和思路都不一样,这样在做题中很容易起冲突,要解决这样的冲突就需要用时间来磨合,可是考试中并没有这么长的时间,我考试前一直担心的就是我和我搭档会在考试中途吵起来,但是考试中发现这样的方式也很好,出现问题的时候会有人帮你进行排查,这样出现错误的概率就很低,而且你的思路和想法也会因为搭档的帮助而扩宽,在这点上我认为结对编程可以达到1+1>2的效果。
四 评价搭档
这次团队合作我和石磊一组。她非常的细心,有耐心,不着急,每次我代码卡住出错的时候,都提示我不要着急,慢慢来。通过努力,我们顺利的完成了这次结队编程。
浙公网安备 33010602011771号