33,008
社区成员
发帖
与我相关
我的任务
分享
#include <iostream>
#include <cstring>
#include <cstdio>
#include <cstdlib>
using namespace std;
#define max_list 11 // 1.表大小加1
struct list
{
int a[max_list];
int length;
};
//将数组进行一分为二的操作//这是一次换分
int Partition(list &L,int low,int high)
{
L.a[0]=L.a[low];//将数组首元素作为转轴值
int pivotkey=L.a[low];//记录转轴值,为下面循环做准备
while(low<high)
{
while(low<high && L.a[high]>=pivotkey)//将比转轴值小的记录移到左端
{high--;}
L.a[low]=L.a[high];
while(low<high && L.a[low]<=pivotkey)
{low++;}
L.a[high]=L.a[low];
}
L.a[low]=L.a[0];//将转轴值赋值到位
return low;//并将转轴位置返回,以便进行下次排序
}
//下面采用递归形式进行对数组的完全排序
void QSort(list &L,int low,int high )
{
if(low<high)
{
int pivotloc=Partition(L,low,high);
QSort(L,low,pivotloc-1);//对低的序列进行排序
QSort(L,pivotloc+1,high);//对高的序列进行排序
}
}
void QuickSort(list &L)
{
QSort(L,1,L.length);//对数据的调用
}
int main()
{
list b;
b.length=0;
int i;
cout<<"请输入10个数"<<endl;
for( i=1;i<=10;i++) // 下标从1开始
{
cin>>b.a[i];
b.length++;
}
QuickSort(b);
cout<<"排序后数列:"<<endl;
for(i=1;i<= 10;i++) // 下标从1开始
cout<<b.a[i]<<" ";
return 0;
}