快速排序算法(Qsort)

原创 2015年07月11日 00:16:57

或许在面试与笔试中问的最多的就是这个快速排序算法(Quick sort)。

其实吧,这个快速排序的思想呢,很简单。

所谓快速排序就是,起始的时候选择一个关键值key一般为数组的第一个值,然后将数组分割成两部分,前一部分全部小于key,后一部分全部大于key,然后前一部分与后一部分分别进行这样的分组,结束后所得的序列就是有序的。

看吧思想炒鸡简单吧~但是实现呢?就有些纠结了,从上面的过程中可以明显看出使用了递归的方法。

从上面算法描述的过程中可以看出,寻找这个安排key值的位置是本算法的核心部分。下面看一下寻找的实现代码:

void swapdata(int arr[],int i,int j)
{
	int temp;

	temp=arr[i];
	arr[i]=arr[j];
	arr[j]=temp;
}
int find_key(int arr[],int low,int high)
{
	int key;
	key=arr[low];
	

	while(low<high)
	{
		while(low<high && arr[high]>key)
			high--;
		swapdata(low,high);
		while(low<high && arr[low]<key)
			low++;
		swapdata(low,high);
	}
	return low;
}

这里为了便于理解,我只说明首次寻找keylocation的过程。按照如下的图示:low以红色表示,high以浅绿色表示:


以上的寻找Key值的思想,可以这么描述:

       起始位置从末尾开始,遇到比key值小的就停止搜索,交换小值到前面;然后从头开始找,遇到比key值大的就停止搜索,交换key值到当前位置。然后一直找完整个数组就停止。

然后有了以上寻找key的过程,结合快速排序的思想,则快速排序的实现代码如下:

void fast_sort(int arr[],int low,int high)
{
	int keylocation;

	if(low<high)
	{
       keylocation=find_key(arr,low,high);
       fast_sort(arr,low,keylocation);
       fast_sort(arr,keylocation+1,high);
	}
}

void Qsort(int arr[],int length)
{
	fast_sort(arr,0,length-1);
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

如何利用C语言中的qsort库函数实现快速排序?

之前,我们已经写过快速排序的程序,而在C语言的库函数中就有快速排序的库函数,即为qsort, 其用法如下: 功 能: 快速排序 头文件:stdlib.h 用 法: void qsort(void...
  • stpeace
  • stpeace
  • 2013年06月03日 22:21
  • 24317

[C/C++基础知识] 一篇就让你彻底搞懂qsort快速排序的文章

最近在做LeetCode的题目、面试和笔试后发现经常考察快速排序的知识。通过这篇文章介绍,能让你彻底的了解和学习快排,主要从一下三个部分进行介绍: 一.C语言实现qsort快速排序 ...

qsort 排序算法(七种)

qsort函数是ANSI C标准中提供的,其声明在stdlib.h文件中,是根据二分发写的,其时间复杂度为n*log(n),其结构为: void qsort(void *base,size_...

c语言自带的排序算法qsort

qsort函数用法 qsort   功 能: 使用快速排序例程进行排序    用 法: void qsort(void *base, int nelem, int width,...

qsort 快排算法讲解

//快速排序 void quick_sort(int s[], int l, int r) { if (l < r) { //Swap(s[l], s[(l...
  • alex0
  • alex0
  • 2013年07月13日 23:27
  • 1065

快速排序(qsort)

快速排序(qsort) 代码如下: #include void Qsort(int *a, int low, int high) { if (low < high) { i...

关于qsort排序的一些心得

首先,排序的方法有很多。对于我们这些初学者来说,可以多懂一些、多学一些来懂一些其中的思想。其实只要完全融会贯通一个就够用了;我认为这个就是qsort排序,因为时间虽然比不上快排,但是计较稳定。其可以对...

uva 例题4-1 qsort 快速排序算法

题意:给定两个长度相同且不超过100的字符串,判断是否能把其中一个字符串的各个字母重拍排,然后对26个字母做一个一一映射,使两个字符串相同。 uva提示:字母的位置不重要,重要的是每个字母出现的次数...

调用函数库中的快速排序算法qsort()排序各种数据类型

快速排序算法已经有函数库提供给我们了,我们只要根据待排序的数据类型,重写cmp()这个接口函数就行了。下面是实例。 qsort()函数在stdlib.h库中 C语言中的qsort()函数原型为vo...

快速排序与折半查找算法函数:qsort与bsearch

qsort用来排序,bsearch用二分法来查找元素 void qsort( void *base, size_t num, size_t width,int (__cdecl *compare)(...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:快速排序算法(Qsort)
举报原因:
原因补充:

(最多只允许输入30个字)