码迷,mamicode.com
首页 > 其他好文 > 详细

[整理]快速排序

时间:2014-06-23 06:36:10      阅读:182      评论:0      收藏:0      [点我收藏+]

标签:des   class   blog   http   tar   com   

快速排序(Quicksort)是对冒泡排序的一种改进。由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

/*
Function:       quicksort
Description:   快速排序
Calls:              swap
Input:             
	--v:数组
	--left:数组下标
	--rigt:数组下标
Return:			  void
Others:         
*/  
void quicksort(int v[],int left,int right){
	
	void swap(int v[],int i,int j);

	if(left<right){

		int i=left,j;
		int x=v[i];/*第一个元素作为基准元素*/

		for (j=i+1;j<=right;j++)/*从第二个元素开始从左向右依次和基准元素比较,小的元素和已比较过的大的元素相互交换位置*/
		{
			if(v[j]<x&&i!=j){
				i++;
				swap(v,i,j);
			}
		}

		swap(v,left,i);/*基准元素和最后一个比较过的小的元素交换位置,至此,小的元素在基准元素左边,大的元素在其右边*/

		quicksort(v,left,i-1);/*对小的元素区间继续重复上面步骤*/
		quicksort(v,i+1,right);/*对大的元素区间继续重复上面步骤*/
	}
}

void swap(int v[],int i,int j){
	int temp=v[i];
	v[i]=v[j];
	v[j]=temp;
}
#include <stdio.h>

int main(void)
{   
	void quicksort(int v[]);
	int v[]= { 70, 30, 40, 60, 10, 20, 50, 100, 80, 90 };
	int length=sizeof(v)/sizeof(int);
	int i;

	quicksort(v,0,length-1);

	for (i=0;i<length;i++)
	{
		printf("%d\n",v[i]);
	}

	return 0;
}

 

参考:

快速排序算法

 

[整理]快速排序,布布扣,bubuko.com

[整理]快速排序

标签:des   class   blog   http   tar   com   

原文地址:http://www.cnblogs.com/Benoly/p/3799673.html

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