实验二 分治算法(二)

一、实验目的与要求

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、运行结果图

四、实验小结

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值