C语言实现快速排序

说明

对一个整数序列进行快速排序地方法是:在待排序地整数序列中取第一个数作为基准值,然后根据基准值进行划分,从而将待排序列划分为不大于基准值者(称为左子序列)和大于基准值者(称为右子序列),然后再对左子序列和右子序列分别进行快速排序,最终得到非递减地有序序列。

函数quicksort(int a[],int n)实现了快速排序,其中,n个整数构成地待排序列保存在数组元素a[0]~~a[n-1]中。

C代码

#include<stdio.h>

void quicksort(int a[],int n){
	int i,j;
	int pivot = a[0];	//设置基准值 
	i = 0;
	j = n - 1;
	while(i < j){
		//大于基准值者保持在原位置 
		while(i < j && a[j] > pivot){	j--;} 
		if(i < j){
			a[i] = a[j];
			i++;
		}
		//不大于基准值者保持在原位置 
		while(i < j && a[i] <= pivot){ 	i++;} 
		if(i < j){
			a[j] = a[i];
			j--;
		}
	} 
	a[i] = pivot;	//基准元素归位 
		if(i > 1){
			//递归地对左子序列 进行快速排序
			quicksort(a,i); 
		}
		if(n-i-1 > 1){
			quicksort(a+i+1,n-i-1);
		}
} 

int main(){
	int i,arr[] = {23,56,9,75,18,42,11,67};
	quicksort(arr,8);
	for(i = 0;i < sizeof(arr)/sizeof(int);i++)
		printf("%d\t",arr[i]);
	return 0;
}

分析

  • 程序中实现快速排序地函数为quicksort,第一个参数为数组,其本质是指针,调用时应给出数组名或数组中某个元素的地址。
  • 快速排序主要通过划分来实现排序。根据说明,先设置待排序序列的第一个元素值为基准值。划分时首先从后往前扫描,即在序列后端找出比基准值小或相等的元素后将其移动到前端,在从前往后扫描,即在序列后端找出比基准值大的元素将其移动到后端,直到找出基准值在序列中的最终排序位置。
  • 在完成1次划分后,基准元素被放入 a[i] ,那么分出来的左子序列由a[0]~a[i-1]这 i 个元素构成,右子序列由a[i+1]~a[n-1]构成,接下来应递归地对左,右子序列进行快速排序。

 

  • 28
    点赞
  • 100
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值