#include <iostream>
#define N 12
using namespace std;
/**
*46,74,16,53,14,26,40,53,86,65,27,34从小到大排序
*快速排序
*/
/******************互换两数的值**********************/
void swapNum(int &num1,int &num2)
{
int temp=num1;
num1=num2;
num2=temp;
}
/***************将序列按照轴值一分为2****************/
int partion(int *nums, int low , int high)
{
nums[0] = nums[low]; //第一个值作为中轴值,放入nums[0]中,此时low位置空出来了
while(low < high) //当low和high相遇时,跳出循环
{
//第一个while循环,判断最后一个数是否比中轴值大,大的话就不用管它,让他待在中枢值的右边,下一次比较high-1即可
while(low<high && nums[high] >= nums[0])
high--;
//跳出第一个循环,表明此时的下标high对应的值比中轴值小,所以应该待在中轴镇左边,此时互换low和high,此时high位置就空出来
swapNum(nums[low],nums[high]);
//换完之后,右边的high位置空出来了,所以现在要从左边开始跟中轴值比较,要是比中轴值小则low++,否则就把这个数填进high位置
//左边的数小于中轴值,则不动他,它本身就在中轴值左边,此时只需比较low+1和中轴值之间的大小
while(low<high && nums[low] <= nums[0])
low++;
//跳出循环,此时表明low对应的值大于中轴值,此时要互换过来。
swapNum(nums[low],nums[high]);
}
nums[low]=nums[0]; //当low和high相遇时(即跳出循环后),就把轴值填入该位置
return low; //low此时代表中轴值的位置
}
/******************快速排序(递归)*******************/
void Qsort(int *nums ,int low ,int high)
{
int pivot;//接收中轴的下标
if(low<high)
{
pivot = partion(nums,low,high);//pivot接收中轴的值,一分为2
Qsort(nums,low,pivot); //对低子表递归
Qsort(nums,pivot+1,high); //对高子表递归
}
}
int main()
{
/**************************************************/
//初始化
int nums[N+1]={0,46,74,16,53,14,26,40,53,86,65,27,34};
/**************************************************/
//开始快速排序
Qsort(nums,1,N);//传入第一个low和最后一个high元素的位置
/**************************************************/
//打印结果
for(int i=1;i<=N;i++)
cout<<nums[i]<<endl;
/**************************************************/
return 0;
}
C++数据结构-快速排序
猜你喜欢
转载自blog.csdn.net/weixin_43323201/article/details/84822092
今日推荐
周排行