《数据结构》实验报告
学号: 2018329621200 |
机器号 10-414-28 |
姓名: 申屠志刚 |
日期: 2019/12/18 |
程序名: main.cpp |
|
实验内容: 快速排序 |
- 目的和要求(需求分析):
- 掌握快速排序的实现方法
- 掌握快速排序的基本思想
- 掌握快速排序的时间性能
- 要求:用快速排序法实现对无序序列的排序
- 程序设计的基本思想,原理和算法描述:
使用分治策略,将一个序列分为两个子序列。
步骤:
在待排序的n个记录中任选一个进行记录(通常选第一个),作为为基准(分区标准)。
进行分区,即:将所有比基准值小的元素放在基准左边,所有比基准值大的元素放在基准的右边,中间为所选的基准。
对左右两个分区递归进行步骤1、2,递归结束条件是序列的大小是0或1。
扫描二维码关注公众号,回复:
8486067 查看本文章
- 调试和运行程序过程中产生的问题及采取的措施:
无
- 源程序及注释:
/*
*@Author: STZG
*@Language: C++
*/
#include <bits/stdc++.h>
using namespace std;
void quickSort(int a[],int low, int high)//a:待排序数组,low:最低位的下标,high:最高位的下标
{
int left=low,right=high;
int key=a[left];//用数组的第一个记录作为分区元素
if(low>=high)
return;
while(left!=right){
while(left<right&&a[right]>=key)//从右向左扫描,找第一个码值小于key的记录,并交换到key
right--;
a[left]=a[right];
while(left<right&&a[left]<=key)//从左向右扫描,找第一个码值大于key的记录,并交换到右边
left++;
a[right]=a[left];
}
a[left]=key;//分区元素放到正确位置
quickSort(a,low,left-1);
quickSort(a,left+1,high);
}
int main()
{
int a[]={2,6,2,3,5,8,9,1,2,4,5,3};
quickSort(a,0,12);
for(auto b:a)
cout<<b<<endl;
//cout << "Hello world!" << endl;
return 0;
}
- 运行结果
- 心得与体会:
通过本次试验,让我更深刻理解了快速排序法与其应用,因为快速排序是对冒泡排序的一种改进,所以在冒泡排序的原有基础上再学习快速排序就显得不是很困难。