第三次作业
第三次作业
1.学号和GIT地址
本次作业两名同学的学号:1501020532王力销 1501020534乔鑫森
本次作业GIT的提交地址 https://gitee.com/darkknightwlx/32WangLiXiao34-QiaoXinSen-KaoHeSan.git
2.学习进度条

3. 本次作业的解题思路
快速排序
快速排序是我们之前学习的冒泡排序的升级,他们都属于交换类排序,都是采用不断的比较和移动来实现排序的。快速排序是一种非常高效的排序算法,它的实现,增大了记录的比较和移动的距离,将关键字较大的记录从前面直接移动到后面,关键字较小的记录从后面直接移动到前面,从而减少了总的比较次数和移动次数。同时采用“分而治之”的思想,把大的拆分为小的,小的拆分为更小的,其原理如下:对于给定的一组记录,选择一个基准元素,通常选择第一个元素或者最后一个元素,通过一趟扫描,将待排序列分成两部分,一部分比基准元素小,一部分大于等于基准元素,此时基准元素在其排好序后的正确位置,然后再用同样的方法递归地排序划分的两部分,直到序列中的所有记录均有序为止。(摘自网上博客)
具体实现所用到的方法
用字符串和字符串的缓冲区来构建一个带有两个缓冲区的字符串,一个缓冲区是低位缓冲区,另一个是高位缓冲区。两个缓冲区交替向中间扫描。
sort() 方法用于对数组的元素进行排序。
最后遍历数组进行输出。
3.代码部分
public class a {
public static void sort(int a[], int x, int y) { //定义一个有两个字符串缓冲区的整形字符串a,低位缓冲区是x,高位缓冲区是y
int i, j, z;
if (x > y) {
return;
}
i = x;
j = y;
z = a[i]; // 用子表的第一个记录做基准
while (i < j) { //从表的两端交替向中间扫描
while (i < j && a[j] >= z)
j--;
if (i < j)
a[i++] = a[j]; //用比基准小的记录替换低位记录
while (i < j && a[i] < z)
i++;
if (i < j)
a[j--] = a[i]; // 用比基准大的记录替换高位记录
}
a[i] = z; // 将基准数值替换回 a[i]
sort(a, x, i - 1); // 对高位缓冲区排序
sort(a, i + 1, y); // 对低位缓冲区排序
}
public static void quicksort(int a[]) { //定义一个方法用来给出字符串a
sort(a, 0, a.length - 1);
}
public static void main(String[] args) {
int a[] = { 15,1,2,5,32,15,1,2,5,34 };
quicksort(a);
for(int c=0;c<a.length; c++) //遍历然后按要求输出
{
System.out.print(a[c] + " ");
}
}
}
4. 截图
5. 感受
快速排序其实就是升级版的冒泡排序,这次的题目我之前在网上就见过,我也想不出更好的方法来替换网上给的标准答案,只能拾人牙慧了。 答题快结束的时候对gi的使用t出了问题,自己变得很急躁,但是急躁不能解决问题。我会认真再看看关于git的使用方法的博文,下一次一定不会再出现这种情况了。
6. 评价伙伴
我也不想用什么汉堡包的方式去评价我的合作伙伴,我俩是上下铺,朝夕与共一起生活了两年半的时间了,我们彼此之间太熟悉了,彼此的优缺点也都心知肚明。我还是那样急躁易怒,他还是遇事不惊,这一点我真的得向他好好学习。这次我们组的过失主要在我,很对不起他。下次考核不知道会以什么样的形式来进行,但是无论如何,我是不会再出现这次的失误了。也希望老乔能多多动手,有想法的时候能自己去将代码实现出来。


浙公网安备 33010602011771号