数据结构之交换排序之快速排序(参考整理严蔚敏数据结构)
来源:互联网 发布:笔记本触摸屏测试软件 编辑:程序博客网 时间:2024/05/22 05:32
//Partition函数:将当前无序表的第一个元素放在最终排序后应该在的 //位置上并返回该位置,且该位置左边的元素值皆小于该位置元素的值, //反之亦然//Qsort函数:调用上面函数并利用上面函数返回的下标将表一分为二, //并递归处理这两个子表//QuickSort函数:显然是从第一个元素开始,最后一个元素结尾调用 //Qsort函数#include<iostream>using namespace std;#define MAXSIZE 20 // 一个用作示例的小顺序表的最大长度typedef int InfoType; // 定义其它数据项的类型typedef int KeyType; // 定义关键字类型为整型typedef struct RedType // 记录类型{KeyType key; // 关键字项InfoType otherinfo; // 其它数据项,具体类型在主程中定义}RedType;typedef struct SqList // 顺序表类型{RedType r[MAXSIZE + 1]; // r[0]闲置或用作哨兵单元int length; // 顺序表长度}SqList;int Partition(SqList &L, int low, int high){ // 交换顺序表L中子表L.r[low..high]的记录,使枢轴记录到位,// 并返回其所在位置,此时在它之前(后)的记录均不大(小)于它RedType t;KeyType pivotkey;pivotkey = L.r[low].key; // 用子表的第一个记录作枢轴记录while (low<high){ // 从表的两端交替地向中间扫描while (low<high&&L.r[high].key >= pivotkey)--high;t = L.r[low]; // 将比枢轴记录小的记录交换到低端L.r[low] = L.r[high];L.r[high] = t;while (low<high&&L.r[low].key <= pivotkey)++low;t = L.r[low]; // 将比枢轴记录大的记录交换到高端L.r[low] = L.r[high];L.r[high] = t;}return low; // 返回枢轴所在位置}void QSort(SqList &L, int low, int high){ // 对顺序表L中的子序列L.r[low..high]作快速排序int pivotloc;if (low<high){ // 长度大于1pivotloc = Partition(L, low, high); // 将L.r[low..high]一分为二QSort(L, low, pivotloc - 1); // 对低子表递归排序,pivotloc是枢轴位置QSort(L, pivotloc + 1, high); // 对高子表递归排序}}void QuickSort(SqList &L){ // 对顺序表L作快速排序QSort(L, 1, L.length);}void print(SqList L){int i;for (i = 1; i <= L.length; i++)printf("(%d,%d)", L.r[i].key, L.r[i].otherinfo);printf("\n");}#define N 8void main(){RedType d[N] = { { 49, 1 }, { 38, 2 }, { 65, 3 }, { 97, 4 }, { 76, 5 }, { 13, 6 }, { 27, 7 }, { 49, 8 } };SqList l;int i;for (i = 0; i<N; i++)l.r[i + 1] = d[i];l.length = N;printf("排序前:\n");print(l);QuickSort(l);printf("排序后:\n");print(l);}
0 0
- 数据结构之交换排序之快速排序(参考整理严蔚敏数据结构)
- 数据结构交换排序之起泡排序(参考严蔚敏数据结构)
- 数据结构之简单选择排序(参考整理严蔚敏数据结构)
- 数据结构之插入排序之希尔排序(缩小增量排序)—参考整理严蔚敏数据结构
- 数据结构算法-排序算法之交换排序-快速排序
- 数据结构之选择排序之堆排序(参考严蔚敏数据结构)
- 数据结构例程—— 交换排序之快速排序
- 数据结构之快速排序
- 数据结构之快速排序
- 数据结构之------快速排序
- 数据结构之快速排序
- 数据结构之快速排序
- 数据结构之快速排序
- 数据结构之快速排序
- 数据结构之快速排序
- 数据结构之快速排序
- 数据结构之快速排序
- 数据结构之快速排序
- 网络资源link
- 京东2015年应届生招聘笔试题(A)卷
- 1001 害死人不偿命的(3n+1)猜想 (15)
- 20141108 【 单片机——万年历DS1302——中断 】 用DS1302模块 & 数码管显示万年历
- 子查询中可以使用group by和order by子句
- 数据结构之交换排序之快速排序(参考整理严蔚敏数据结构)
- C++的那些秘密---函数返回局部变量
- UVA 1625 Color Length
- android实现多语言自动切换字体
- java.lang.InstantiationError: android.os.Vibrator
- c语言-自定义数据类型
- 1002. 写出这个数 (20)
- [Cocos2d-x开发问题-4] Cocos2d-x整体框架描述
- cocos2d-x生成的ios应用和安卓应用的ID(用于区分不同应用的标识)