快速排序算法(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);
}


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

相关文章推荐

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()排序各种数据类型

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

超快速排序算法

  • 2016-04-20 13:34
  • 89KB
  • 下载

快速排序算法

  • 2014-09-06 19:37
  • 555B
  • 下载

快速排序算法-Java、Python实现

算法简介就直接套用百度百科了,感觉讲的挺清楚的,后面会具体分析一下代码。 快速排序(Quicksort)是对冒泡排序的一种改进。 快速排序由C. A. R. Hoare在1962年提出。它的基本思...
  • Belug
  • Belug
  • 2017-04-24 21:02
  • 220

快速排序算法实现

  • 2014-12-21 17:47
  • 889B
  • 下载

快速排序算法

  • 2014-03-24 21:21
  • 628B
  • 下载

详解Redis源码中的部分快速排序算法(pqsort.c)

看标题,你可能会疑惑:咦?你这家伙,怎么不讲解完整的快排,只讲一部分快排……其实“部分快排”是算法的名字。本文几乎与普通快排无异。看懂了本文,你对普通的快排也会有更深的认识了,实际上本文相当详细呢 ...

快速排序算法过程

  • 2013-07-30 00:13
  • 52KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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