<菜鸟学算法-A排序(分治的思想:快速排序)>

设要排序的数组是A[0]……A[N-1],首先任意选取一个数据(通常选用数组的第一个数)作为关键数据,然后将所有比它小的数都放到它前面,所有比它大的数都放到它后面,这个过程称为一趟快速排序。值得注意的是,快速排序不是一种稳定的排序算法,也就是说,多个相同的值的相对位置也许会在算法结束时产生变动。
一趟快速排序的算法是:
1)设置两个变量i、j,排序开始的时候:i=low-1,j=low;
2)以第最后一个数组元素作为关键数据,赋值给 key,即 key=A[high];
3)从j开始向前搜索,即由后开始向前搜索(j++),找到第一个小于 key的值A[j],将A[j]于A[i]交换,i++;
4) 从j继续往前搜索直到high-1,将i+1的值与可key交换。
/*
 ============================================================================
 Name        : quick_sort.c
 Author      : braveboyny
 Version     :
 Copyright   : Your copyright notice
 Description : Hello World in C, Ansi-style
 ============================================================================
 */

#include<stdio.h>
int partition(int array[],int low,int high)
{
	int i,j,key,temp;
	key=array[high];/*以key值作为参考将数组划分成大于key和小于key的2部分*/
	i=low-1;  /*以i作为边界,小于key的放在i(包括i)左边,大于key的放在在i右边
			   *初始默认都大于key*/
	for(j=low;j<high;j++){
		if(array[j]<=key){
			i=i+1;  /*若array[j]<=key,则将array[i+1]与array[i]交换,
			 	 	 *因为i是边界所以i+1代表的数绝B大于key,这样就将小于key的值放在了i左边*/
			temp=array[i];
			array[i]=array[j];
			array[j]=temp;
			}
	}
	temp=array[i+1];
	array[i+1]=array[high];
	array[high]=temp;/*最后将大于key的array[i+1]于key也就是array[high]交换
	 	 	 	 	 	 	 	  * 这样分组就圆满完成了*/
	return i+1;
}
void quick_sort(int array[],int low,int high)
{
	int k;
	if(low<high){
		k=partition(array,low,high);
		quick_sort(array,low,k-1);
		quick_sort(array,k+1,high);
	}
}
int main(int argc,char *argv[])
{
	int array[10]={8,2,3,6,5,9,4,1,0,7},i;
	quick_sort(array,0,9);
	for(i=0;i<10;i++)
		printf("%d ",array[i]);
	putchar('\n');
	return 0;
}
//out:0 1 2 3 4 5 6 7 8 9




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值