关闭

快速排序算法(Qsort)

472人阅读 评论(0) 收藏 举报
分类:

或许在面试与笔试中问的最多的就是这个快速排序算法(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);
}


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:133144次
    • 积分:2994
    • 等级:
    • 排名:第11692名
    • 原创:170篇
    • 转载:17篇
    • 译文:5篇
    • 评论:22条
    我的Github地址
    最新评论