要点总结:
- 分治思想
- 递归思想
- 如何做到把数字以所选基准数的大小为基准将数字排列到基准数字左右
直接给代码:
#include<iostream>
#include<stdlib.h>
using namespace std;
int findpivot(int a[],int low, int high){
int leftwall = low; //用于记录分割位置
swap(a[low],a[high]); //选择第一个数作为基准数并放到最后面
for(int i = low;i < high;i++){
if(a[i] < a[high]){ //比基准数小,放在分割位置左边
swap(a[i],a[leftwall]);
leftwall++; //分割位置后移
}
}
swap(a[high],a[leftwall]); //将基准数放到正确的位置
int i =0;
while(i < 10){ //显示当前排序结果,可不要
cout << a[i] <<" ";
i++;
}
cout << endl;
return leftwall;
}
void quicksort(int a[],int low,int high){
if(low < high){
int pivot = findpivot(a,low,high);
quicksort(a,low,pivot - 1);
quicksort(a,pivot + 1,high);
}
return;
}
int main(){ //测试函数
int i = 0;
int a[10] = {10,8,9,3,4,6,5,7,2,1};
quicksort(a,0,9);
while(i < 10){
cout << a[i] <<" ";
i++;
}
getchar();
}
反思:
自己的想法非常不足,应当理清算法后再写成代码,不然非常浪费时间,还会让自己迷糊。
由于是第一次使用C++查了不少资料相关链接如下:
算法思想:https://www.youtube.com/watch?v=Hoixgm4-P4M
常用库函数大全 https://blog.csdn.net/rl529014/article/details/50370514
C++输入方法 https://blog.csdn.net/u014744118/article/details/51955174