链接学习:https://www.runoob.com/w3cnote/quick-sort.html
运行效果:
代码学习:
/* 快速排序算法是基于分治策略的另一个排序算法。其基本思想是,对于 输入的子数组a[p:r],按以下三个步骤进行排序: 1,分解:以a[p]为基准元素将a[p:r]划分成3段,分别是a[p:q-1],a[q],a[q+1:r], 使a[p:q-1]中任何一个元素小于等于a[q],而a[q+1:r]中任何一个元素大于等于a[q]. 下标q在划分过程中已确定。 2,递归求解:通过递归调用快速排序算法,分别对a[p:q-1]和a[q+1:r]进行排序 3,合并:由于对a[p:q-1]和a[q+1:r]的排序时就地进行的,因此在a[p:q-1]和 a[q+1:r]都已排好序后,不需要执行任何计算,a[p:r]则已排好序。 */ #include<iostream> using namespace std; #define MAX 100 int arr[MAX]={0}; void quickSort(int* arr,int left,int right){ if(left<right){ int i=left,j=right,x=arr[left]; while(i<j){ while(i<j&&arr[j]>=x){ j--; } if(i<j){ arr[i++]=arr[j]; } while(i<j&&arr[i]<x){ i++; } if(i<j){ arr[j--]=arr[i]; } arr[i]=x; quickSort(arr,left,i-1); quickSort(arr,i+1,right); } } } int main(){ int n,left,right; cout<<"请输入你想要对多少个数进行排序:"; cin>>n; cout<<"***********************************"<<endl; cout<<"请按照下面的提示输入你要排序的数据····要乖哦··"<<endl; cout<<"***********************************"<<endl; for(int i=1;i<=n;i++){ cout<<"请输入你要排序的第"<<i<<"个数:"; cin>>arr[i]; cout<<endl; } cout<<"*************************************"<<endl; cout<<"你已经完成要排序数据的录入····"<<endl; cout<<"你想要排序的起点为(>=1):"; cin>>left; cout<<"你想要排序的终点为(<="<<n<<"):"; cin>>right; cout<<"**********排序结果如下哒鸭******************************"<<endl; quickSort(arr,left,right); for(int i=1;i<=n;i++){ cout.width(4); cout<<arr[i]; } cout<<endl; return 0; }
Nearth==>分治策略007/快速排序算法
最新推荐文章于 2023-10-18 14:10:54 发布