快速排序的两种方法(双边循环法和单边循环法,C++实现)

双边循环法

#include<iostream>
using namespace std;

int partition(int array[],int startIndex,int endIndex);
void quickSort(int array[],int startIndex,int endIndex){
	//递归终止条件,startIndex>=endIndex
	if(startIndex>=endIndex)
		return;
	//得到基准元素的位置
	int pivotIndex=partition(array,startIndex,endIndex);
	//根据基准元素,分成两部分进行递归排序
	quickSort(array,startIndex,pivotIndex-1);
	quickSort(array,pivotIndex+1,endIndex);
}

//分治(双边循环法)
int partition(int array[],int startIndex,int endIndex){
	//取第1个位置的元素作为基准元素
	int pivot=array[startIndex];
	int left=startIndex;
	int right=endIndex;
	while(left!=right){
		//控制right指针比较并左移
		while(left<right&&array[right]>pivot){
			right--;
		} 
		//控制left指针比较并右移
		while(left<right&&array[left]<=pivot){
			left++;
		} 
		//交换left和right指针所指向的元素
		if(left<right){
			int temp=array[left];
			array[left]=array[right];
			array[right]=temp;
		} 
	} 
	//pivot和指针重合点交换
	array[startIndex]=array[left];
	array[left]=pivot;
	
	return left; 
} 
int main()
{
	int array[]={4,7,6,5,3,2,8,1};
	int length=sizeof(array)/sizeof(array[0]);
	quickSort(array,0,length-1);
	for(int i=0;i<length;i++)
		cout<<array[i]<<" ";
	return 0;
}
发布了7 篇原创文章 · 获赞 9 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/cup160828/article/details/105139727