2020-06-13

一、题目名称:选择排序、冒泡排序、归并排序、快速排序、插入排序的算法实现和时间复杂度
二、题目内容:利用switch结构来选择实验所要用的排序算法,每一种排序都用相同的计算运行时间的代码,不同的算法就在算法实现部分进行改动(如下代码1至5所示)。不断的改变数据规模,每一个规模在实验时,用循环进行多次实验并作为样本记录消耗的时间。最后输出在不同排序算法下,不同的数据规模的20次实验样本和平均用时。 三、算法实现1、直接插入排序
基本思路:L(i)为待排序表中一个元素,前一子序列L[1…i-1]为有序子序列,后一子序列L[i+1…n]为无序子序列,为了实现将元素L(i)插入到已有序的子序列L[1…i-1]中,需进行以下操作:
1)查找出L(i)在L[1…i-1]中的插入位置k;
2)将L[k…i-1]中所有元素全部后移一个位置;
3)将L(i)复制到L(k)。
过程:就是将后面无序子序列中的每一个元素依次往前面有序子序列中插入到相应的位置,初始时将待排序列的第一个元素作为有序子序列的一个元素。
2、冒泡排序
基本思路:假设待排序表长为n,从前往后或从后往前两两比较相邻元素值,若为逆序,则交换两者的顺序,直到序列比较完,称为一趟冒泡排序,共进行n-1趟冒泡过程。
3.快速排序
基本思路:快速排序是对冒泡排序的一种改进,基本思想是基于分治法的:在待排序表L[1…n]中任取一个元素(一般是待排序表的第一个元素)作为基准,通过一趟排序将待排序表划分为独立的两部分L[1…k-1]和L[k+1…n],使得L[1…k-1]中的所有元素小于基准元素,L[k+1…n]中的所有元素大于或等于基准元素,基准元素放在了最终位置L[k]上,这个过程称为一趟快速排序,后分别递归地对两个子表重复上述过程,直至每部分内只有一个元素或空为止,此时所有元素放在了其最终位置上。
4.选择排序
基本思路:第i趟在后面n-i+1(i=1,2,3,…n-1)个待排序元素中选取关键字最小的元素,作为前面有序子序列的第i个元素,直到第n-1趟做完,待排序元素只剩下一个,就不用再选了,假设待排序表为L[1…n],第i趟排序即从L[i…n]中选择关键字最小的元素与L(i)交换,每一趟排序可以确定一个元素的最终位置,进行n-1趟就使排序表有序。
5.归并排序
基本思路:归并排序与基于交换、选择等排序思想不一样,归并是将两个或两个以上的有序表组合成一个新的有序表。假定待排序表含有n个记录,可以看成是n个有序的子表,每个子表长度为1,然后两两归并,得到n/2(向上取整)个长度为2或1的有序表;在两两归并,如此反复,直到合并成一个长度为n的有序表为止。
四、算法复杂度分析及经验归纳1.算法复杂度分析 2.经验归纳 (1)用java写排序代码不熟练。 (2)Java中运行时间的函数和随机函数运用不熟练。 (3)通过CSDN上的博客和自己的练习解决了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值