第三章 :查找与排序-------3.4快排之双向扫描分区法

论坛 期权论坛 脚本     
匿名技术用户   2020-12-28 07:58   22   0

快排之双向扫描分区法

#include<iostream>
using namespace std;

int partition(int A[],int p,int r){
 int pivot=A[p];
 int left=p+1;
 int right=r;
  
 while(left<=right){
  //left不停往右走,直到遇到大于主元的元素
  while(A[left]<=pivot) left++;   //循环退出时,left一定是指向第一个大于主元的位置 
  while(A[right]>pivot) right--;   //循环退出时,right一定是指向最后一个小于等于主元的位置 
  if(left<right){
   swap(A[right],A[left]); 
  }   
 } 
 //while退出时,两者交错,且right指向的是最后一个小于等于主元的位置,也就是主元应该待的位置 
 swap(A[p],A[right]);
 
 return right;  
}

void quickSort(int A[],int p, int r){
 if(p<r){
  int q=partition(A,p,r);
  quickSort(A,p,q-1);
  quickSort(A,q+1,r); 
 }
} 

int main(){
 int arr[]={1,6,2,3,4,8,11,3,9,4,2,5,3};
 quickSort(arr,0,12);
 for(int i=0;i<13;i++){
  cout<<arr[i]<<" ";
 }

 return 0;
}

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:7942463
帖子:1588486
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP