一、实验目的与要求
1、熟悉快速排序算法;
2、掌握分治算法;
3、能对设计的算法进行复杂度分析。
二、实验题目
1、快速排序算法的实现。任意输入20个整数,对这20个整数进行快速排序。要求使用末元素作为划分基准。
2、众数问题。给定含有n个元素的多重集合S,每个元素在S中出现的次数称为该元素的重数,多重集合S中重数最大的元素称为众数。对于给定的由n个自然数组成的多重集S,编程计算S的众数及其重数。(选做题)
例如:S={8,6,5,10,10,11,5,6,20,10,8,7,12,10,15,8,9,10}
三、实验步骤
1、算法思想描述
(1)分解——对于待排序序列a[p,r],以a[p]为基准元素将a[p:r]划分成3段a[p:q-1]、a[q]和a[q+1:r],使得a[p:q-1]中任何元素小于a[q] , a[q+1:r]中任何元素大于a[q] ;下标q在划分过程中确定;
(2)递归求解——通过递归调用快速排序算法分别对a[p:q-1]和a[q+1:r]进行排序;
(3)合并——由于对a[p:q-1]和a[q+1:r]的排序是就地进行的,所以在a[p:q-1]和a[q+1:r]都已排好序后不需要执行任何计算,将a[p:q-1]和a[q+1:r] 直接按合并,得到的序列a[p:r]就是有序序列。
2、实现的程序代码
3、运行结果图
四、实验小结