快速排序

2026/4/27 9:23:33

算法设计与分析实验报告

实验一 快速排序

院班学姓

系级号名

: 计算机科学与技术 : :

任课教师: 成

湘 潭 大 学 2016年5月

实验一 快速排序

一. 实验内容

运用分治递归思想,编程实现快速排序算法。通过不同实例测试,分析最坏、最好、平均情况下的时间复杂度,并设计实验程序验证分析结果。

二.实验目的

1、理解递归的概念及实现方法;

2、掌握分治策略的基本思想以及用分治法解决问题的一般技巧; 3、掌握求解递归算法时间复杂度的一般方法。

三. 算法描述

/*递归形式的快速排序算法*/

Void QSort(SqList &L,int low,int high){

//对顺序表L中的子序列L.r[low..high]作快速排序

If(low < high){ pivotloc = Partition(L,low,high);//将L.r[low..high]一分为二

QSort(L,low,pivotloc - 1); //对低子表递归排序 QSort(L,pivotloc + 1,high); //对高子表递归排序 }

}//QSort

Void QuickSort(SqList &L){ //对顺序表L作快速排序

QSort(L,1,L.length); }//QuickSort

四. 算法实现

1.数据结构及函数说明

基本思想:

通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比

另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

int Partition (SqList &L,int low,int high){

//交换顺序表L中子表r[low..high]的记录,枢轴记录到位,并返回其所 //在位置,此时在它之前的记录均不大于它。

L.r[0] = L.r[low];//用子表的第一个记录作枢轴记录

2

pivotkey = L.r[low].key;枢轴记录关键字

while(low < high){ //从表的两端交替的向中间扫描

while(low < high && L.r[high].key >= pivotkey) --high; L.r[low] = L.r[high]; //将比枢轴记录小的记录移到低端 while(low < high && L.r[high].key <= pivotkey) ++low; L.r[high] = L.r[low]; //将比枢轴记录大的记录移到高端 }

L.r[low] = L.r[0]; //枢轴记录到位 return low; }

//返回枢轴位置

函数说明:

int choose_pivot(int i,int j ) {

return((i+j) /2);//取中轴数 }

2.源程序代码

#include

#include #include

int choose_pivot(int i,int j ) {

return((i+j) /2); }

void quicksort(int list[],int m,int n) {

int key,i,j,k; if( m < n)

{

k = choose_pivot(m,n); swap(&list[m],&list[k]); key = list[m]; i = m+1; j = n;

while(i <= j)

3


快速排序.doc 将本文的Word文档下载到电脑
搜索更多关于: 快速排序 的文档
相关推荐
相关阅读
× 游客快捷下载通道(下载后可以自由复制和排版)

下载本文档需要支付 10

支付方式:

开通VIP包月会员 特价:29元/月

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:xuecool-com QQ:370150219