主流的快排根据双指针进行交换会导致俩个相等的数相对位置发生改变,我这种不会。一下代码函数变量可以省一个,但是便于理解和懒我就不改了; #include<iostream> using namespace std; int sort(int *a,int* temp, int pos,int left,int right) { //cout<<"运行了"; int j=left; for(int i=left;i<=right;i++) { if(a[pos]>a[i]) { temp[j++]=a[i]; } } int result=j; temp[j++]=a[pos]; for(int i=left;i<=right;i++) { if(a[pos]<a[i]) { temp[j++]=a[i]; } } while(left<=right) { a[left]=temp[left]; left++; } return result; } void start(int* a ,int *temp,int pos,int left ,int right) { if(left<right) { int i=sort(a,temp,pos,left,right); start(a,temp,left,left,i-1); start(a,temp,i+1,i+1,right); } } int main() { int n; cin>>n; int *a=new int[n]; int *temp=new int[n]; for(int i=0;i<n;i++) { cin>>a[i]; } start(a,temp,0,0,n-1); for(int i=0;i<n;i++) { cout<<a[i]<<" "; } delete a,temp; return 0; }
基于快排思想的另一种非主流排序算法
于 2024-05-26 15:54:38 首次发布