您的位置:首页 > 理论基础 > 数据结构算法

C++代码,数据结构-内部排序-交换排序-快速排序

2014-03-14 20:43 330 查看
快速排序是对起泡排序的一种改进,通过一趟排序,可将序列分隔成独立的两部分,但一部分的关键字均比另一部分的关键字小,在分别对两部分记录进行排序,最后达到有序,

#include<iostream>
using namespace std;
//第十章 内部排序

//待排记录数据的数据结构
#define maxsize 100000
struct redtype{
int key;
};
struct Sqlist
{
redtype r[maxsize];
int length;
};

int buildsq(Sqlist &sq){
int x;
cin>>x;
sq.length=x+1;

for(int i=1;i<=x;++i)
{
cin>>sq.r[i].key;
}
return x;
}
//快速排序是目前被认为是最好的一种内部排序方法,其中的pivotkey可以依照三折取中的法则来取,可大大改善快速排序在最换情况下的性能,
int Partion(Sqlist &sq,int low,int high){
   int pivotkey=sq.r[low].key;
while(low<high){
while(low<high&&sq.r[high].key>=pivotkey)--high;//先从后往前搜索比pivotkey大的,交换之
sq.r[low].key=sq.r[high].key;
while(low<high&&sq.r[low].key<=pivotkey)++low;//在从前往后搜索比pivotkey小的,交换之
sq.r[high].key=sq.r[low].key;
}
sq.r[low].key=pivotkey;//最后把pivotkey的值赋到正确位置,
return low;
}

void Qsort(Sqlist &sq,int low,int high){

if(low<high){
int pivotkey=Partion(sq,low,high);
Qsort(sq,low,pivotkey-1);//前半部分
Qsort(sq,pivotkey+1,high);//后半部分
}
}

int main(){
    
    Sqlist sq;
int t= buildsq(sq);

Qsort(sq,1,t);

for(int i=1;i<=t;++i){
cout<<sq.r[i].key<<"";
}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: