算法排序之快速排序

思想:为当前数找到合适的位置,在这个数之前都是小于这个数的,在这个数之后都是大于这个数的。然后再对前后两部分分别使用快速排序算法的思路进行排序。逐渐递归下去,完成整个排序过程。

时间复杂度:O(nlogn)

 

核心在于:如果将指定数移到正确的位置

Partition定义:

 

e>v:直接放在>v的后面

e<v:将e和>v的第一个元素进行交换位置,j++

 

遍历完成后:

 

将v和<v的最后一个数调换位置

 

实现:

#include <iostream>
#include <algorithm>

using namespace std;

//对arr[l,r]做partition 
int partition(int arr[], int l,int r){
	int j=l;
	for(int i=l+1; i<=r; i++)
	{
		//[l+1,j]<v [j+1,i-1]>v
		if(arr[i]<arr[l])
		{
			swap(arr[j+1],arr[i]);
			j++;
		}		
	}
	swap(arr[j],arr[l]);
	return j;
}
void quickSort(int arr[], int l,int r){
	if(l>=r)
		return;
	int p=partition(arr,l,r); //为数组的第一个数找到正确的位置并返回 
	quickSort(arr,l,p-1);//<v部分做快排 
	quickSort(arr,p+1,r);//>v部分做快排 
}

int main()
{
	int a[10]= {5,8,7,9,6,3,4,1,2,0};
	quickSort(a,0,9);
	for(int i=0; i<10; i++)
	{
		cout<<a[i]<<" ";
	}
	cout<<endl;
	return 0;
}
发布了86 篇原创文章 · 获赞 0 · 访问量 4085

猜你喜欢

转载自blog.csdn.net/qq_31965925/article/details/105143918