码迷,mamicode.com
首页 > 编程语言 > 详细

排序算法总结(四)选择排序【QUICK SORT】

时间:2016-08-05 21:35:49      阅读:153      评论:0      收藏:0      [点我收藏+]

标签:

感觉自己这几篇都是主要参考的Wikipedia上的,快排就更加是了。。。。wiki上的快排挺清晰并且容易理解的,需要注意的地方我也添加上了注释,大家可以直接看代码。需要注意的是,wikipedia上快排的pivot选择的是末尾的数,而不是随机数

#include <iostream>
#include <vector>
using namespace std;

template<typename T>
void Quick_Sort( vector<T> &nums, int start, int end ){
	if( end <= start) return;
	T pivot = nums[end];//基准
	int left = start;
	int right = end-1;
	while( left < right ){
		while( nums[left] < pivot && left < right ) left++;
		while( nums[right] > pivot && left < right ) right--;
		swap( nums[right], nums[left] );
	}
	if( nums[left] >= nums[end] ){
		swap( nums[left],nums[end]); //处理pivot,如果大于等于,则在pivot的右侧,所以交换nums[end]和nums[left] ,此时以left为轴
		//左边小于nums[left]右边大于nums[left] 
	}
	else{
		left++; //如果nums[left] < pivot,则nums[left]属于pivot左侧,所以left++,不需要交换 
	}
	Quick_Sort( nums, start, left-1);   
	Quick_Sort( nums, left+1, end ); 
}

template <typename T>
void QuickSort( vector<T> &nums ){
	int start = 0;
	int end = nums.size(); 
	Quick_Sort(nums,start,end);
} 

int main(){
    vector<int> nums{25,7,37,47,13,13,30,15,4,1,12,49};
    cout<<" Before Sort:" ;
    for( auto m: nums){
        cout <<  m <<" ";
    }
    cout<<endl;
    QuickSort( nums );
    cout<< " After Sort:";
    for( auto m: nums){
        cout  << m <<" ";
    }
    cout<<endl;
} 

 

排序算法总结(四)选择排序【QUICK SORT】

标签:

原文地址:http://www.cnblogs.com/rockwall/p/5742691.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!