交换排序之快速排序

基本思想:快速排序使用分治的思想,通过一趟排序将待排序列分割成两部分,其中一部分记录的关键字均比另一部分记录的关键字小。之后分别对这两部分记录继续进行排序,以达到整个序列有序的目的。举例来说:
数列:5,2,4,9,3,8,7,1,6,0
①选一个基准,此处以第一位5位基准,然后将5与各个数相比较,比5大的数放在5的右边(注意,此时右边的数并不是一组有序的数,仅仅比5大而已),比5小的数放在5的左边(与上相似)
②使用递归算法,将5左边的数与右边的数分别单独看成一组新的数列,再执行①的步骤思想;直至结束。
我的排序思想便是如此,但具体的执行,还需考虑:
根据①的思想衍生出代码思路,先从右边遍历,再从左边遍历,即代码中的while循环。再根据②的思想分割数列递归运算,直到排序完成。
代码如下:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

/*快速排序*/
void quicksort(int *ttr,int left,int right)
{
	int i,j,temp,k;
	if(left > right)
	{
		return;
	}
	temp = ttr[left];//先记录下 基准数,以便最后归位
	i	 = left;
	j	 = right;
	while(i!=j)
	{
		while(ttr[j] >= temp && i<j)//从右向左依次查找
		{
			j--;
		}
		while(ttr[i] <= temp && i<j)//从左向右依次查找
		{
			i++;
		}
		if(i < j)  //如果符合条件,交换两数的位置,
		{
				 k = ttr[i];
			ttr[i] = ttr[j];	
			ttr[j] = k;
		}
	}
	ttr[left] = ttr[i];
	ttr[i] = temp;
	quicksort(ttr,left,i-1);
	quicksort(ttr,i+1,right);
}
//测试函数
int main()
{
	int str1[10] = {5,2,4,9,3,8,7,1,6,0};
	int integer,i;
	integer = sizeof(str1) / sizeof(int);
	quicksort(str1,0,integer-1);
	for(i = 0;i < integer;i++)
	{
		printf("%d\t",str1[i]);
	}
	printf("\n");
	system("pause");
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值