#include <iostream> using namespace std; //选左边值为起始值枢纽 void quicksort_l(int *a,int l,int r) { if(l<r) { int i=l; int j=r; int pivot=a[l]; do{ do i++;while (a[i]<pivot); do j--;while (a[j]>pivot); if(i<j) { cout<<"执行交换"<<endl; swap(a[i],a[j]); } } while (i<j); swap(a[l],a[j]); quicksort_l(a,l,j); quicksort_l(a,j+1,r); } } //选右值作为起始的枢纽值 void quicksort_r(int *a , int l,int r) { if(l<r) { int i=l-1; int j=r; int pivot=a[r]; do{ do j--;while (a[j]>pivot); do i++;while (a[i]<pivot); // cout<<"循环内部的"<<"i="<<i<<"j="<<j<<endl; if (i<j) { cout<<"执行交换"<<endl; swap(a[i],a[j]); } } while (i<j); // cout<<"循环外部的"<<"i= "<<i<<"j= "<<j<<endl; swap(a[r],a[i]); quicksort_r(a,l,i-1); quicksort_r(a,i+1,r); } } //不使用do while形式的左枢纽值或右枢纽值排序 int main() { int a=-1; int list1[]={22,3,4,56,66,34,15,65,78,10}; quicksort_r(list1,0,9); for (int i = 0; i <10 ; i++) { cout<<list1[i]<<" "; } cout<<endl; return 0; }
c++ 实现快排
最新推荐文章于 2024-05-15 00:56:51 发布