难实现:
代码语言:javascript复制/*
编写一个程序,将一个整型数组中的数据从大到小排列,要求使用快速排序
*/
#include <iostream>
using namespace std;
//快速排序是先挑选一个基准,把比它小的放在左边,比它大的放在右边
//之后在他的左边继续挑选一个基准,执行上述过程
//在它右边也是一样
void swap(int *a,int *b)
{ /*交换序列中元素的位置*/
int tmp;
tmp = *a;
*a = *b;
*b = tmp;
}
//s,t表示每一序列的首尾元素
void quickSortArray(int array[], int s,int t)
{
int low,high;
if(s<t)
{
low = s;
high = t 1;
while(1)
{
do low ;
while(array[low]>=array[s] && low!=t); /*array[s]为基准元素,重复执行low 操作*/
do high--;
while(array[high]<=array[s] && high!=s); /*array[s]为基准元素,重复执行high--操作*/
if(low<high)
swap(&array[low],&array[high]); /*交换array[low]和array[high]的位置*/
else
break;
}
swap(&array[s],&array[high]); /*将基准元素与array[high]进行交换*/
quickSortArray (array,s,high-1); /*将基准元素前面的子序列快速排序*/
quickSortArray (array,high 1,t); /*将基准元素后面的子序列快速排序*/
}
}
void quickSort(int array[], int arraySize) {
quickSortArray(array, 0, arraySize-1);
}
main()
{
int i,array[10];
printf("Input ten integern");
for(i=0;i<10;i )
{
scanf("%d",&array[i]); /*循环输入10个整数*/
}
quickSort(array,10); /*执行快速选择排序*/
printf("nThe result of quick sort isn");
for(i=0;i<10;i ) {
printf("%d ",array[i]); /*输出排序后的结果*/
}
getchar();
getchar();
}
易实现:
代码语言:javascript复制#include <algorithm>
#include <cassert>
#include <functional>
#include <iterator>
#include <iostream>
using namespace std;
//先找到中间位置元素,mid
//std::partition 比较比 mid 小的和大的
//最后两部分递归调用快速排序
//C 14
template <class Fd, class Compare=std::less<Fd>>
void quick_sort(Fd first, Fd last, Compare cmp=Compare{})
{
auto const N=std::distance(first,last);
if(N<=1) return;
auto const mid=*std::next(first,N/2);
auto const mid1=std::partition(first,last,[=](auto const& elem){
return cmp(elem,mid) ; });
auto const mid2=std::partition(mid1,last,[=](auto const& elem){
return !cmp(mid,elem); });
quick_sort(first,mid1,cmp);
quick_sort(mid2,last,cmp);
}
int main()
{
std::vector<int> data={0,3,1,2,4,6,6,10,5};
quick_sort(data.begin(),data.end(),std::less<int>());
for(int i=0;i<data.size();i )
cout<<data[i]<<endl;
return 0;
}
博主:菜鸟程序员
初衷:学习资料,程序设计,视觉算法,求职经验,工作心得