快速排序

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

#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的元素号
}

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值