
#include <iostream.h>
#include <stdlib.h>
#define maxarray 10 //定义待排序数组长度
/*----------------------------
函数名:QuickSort()
功能:快速排序递归实现
结果:依次对数组进行单轮排序,直到把数组分成有序的序列片段,直到长度为1时结束,不可再分
-----------------------------*/
void QuickSort(int arr[],int low,int high);//实现快速排序
/*----------------------------
函数名:SortOnce()
类型:int
功能:进行第一轮排序
结果:将数组arr[]分成全大于第一个元素的部分,和一个全小于第一个元素的部分
-----------------------------*/
int SortOnce(int arr[],int low,int high);
/*----------------------------
函数名:main()
类型:void
功能:主函数
结果:随机产生一个数组,排序后输出
-----------------------------*/
void main()
{
int array[maxarray];
cout<<"首先随机产生一个长度为10的数组"<<endl;
for(int i=0;i<maxarray;i++)
{
array[i]=rand()%100;//随机生成一个数组
cout<<array[i]<<"\t";
}
QuickSort(array,0,maxarray-1);//对数组进行快速排序操作
cout<<"经过快速排序后,结果如下:"<<endl;
for(i=0;i<maxarray;i++)
{
cout<<array[i]<<"\t";//输出排序后的数组
}
}
/*函数QuickSort()的实现*/
void QuickSort(int arr[],int low,int high)
{
if(high>low)//长度为1时,不可再分,递归推出
{
int mark=SortOnce(arr,low,high);//找到经过一轮排序后的中间元素的位置
QuickSort(arr,low,mark-1);//对前一段进行快速排序
QuickSort(arr,mark+1,high);//对后一段进行快速排序
}
}
/*函数SortOnce()的实现*/
int SortOnce(int arr[],int low,int high)
{
int mark_value;
mark_value=arr[low];//用mark_value记录第一个元素的值,将数组分为全大于和全小与它的两段
while(low<high)//当low,high相遇,证明一轮排序完毕
{
while(low<high && arr[high]>mark_value) high--;//从右向左寻找比mark_value小的值
arr[low]=arr[high];//将high号元素放到mark_value元素前
while(low<high && arr[low]<mark_value) low++;//从左向右寻找比mark_value大的值
arr[high]=arr[low];//将low号元素放到mark_value元素后
}
arr[low]=mark_value;
return low;//返回mark_value的元素号
}

本文介绍了如何使用C++编程实现快速排序算法。通过`QuickSort`和`SortOnce`两个函数,递归地对数组进行单轮排序,直至数组完全有序。在`main`函数中,展示了如何随机生成一个数组并进行排序,最后输出排序后的结果。
58万+

被折叠的 条评论
为什么被折叠?



