快速排序使用代码解析-基于C语言

基于C语言的快速排序代码分析

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
void swap(int *a,int *b){
	if(*a==*b){//异或交换如果相同会一直为0
		return;
	}
	*a=*a^*b;
	*b=*a^*b;
	*a=*a^*b;
}

void quicksort(int *array,int left,int right){
	if(left>=right){ //当开始下标大于或者等于借宿下标时 此时说明没有只有一个元素或者传值错误,直接退出
		return;
	}
	int tmpleft=left;//begin 设定临时开始下标
	int tmpright=right;//end 设定临时结束下标
	int key=tmpleft; //设定排序key 此处使用临时开始下标
	while(tmpleft<tmpright){ //当临时开始下标大于临时结束下标时进行循环(说明:循环体内进行两个临时变量的遍历)
		while(array[tmpright]>=array[key]&&tmpright>tmpleft){//右半边逐个查找 
			//如果临时结束变量的数组值大于或者等于key变量的数组值 并且临时结束变量大于临时开始变量 代表此临时结束变量的数组值比key代表的数组值大
			tmpright--;	 //临时结束变量向左移动,即临时结束变量往前移位
		}
		while(array[tmpleft]<=array[key]&&tmpleft<tmpright){//左半边逐个查找
			tmpleft++;  //临时开始变量向右移动,即临时开始变量往后移位
		}
		swap(&array[tmpleft],&array[tmpright]); //交换临时开始变量和临时结束变量代表的数组值
	}
	//跳出当前循环后,说明临时开始下标和临时借宿下标相遇,代表此key的一轮排序已完成
	swap(&array[tmpleft],&array[key]);//在此交换key与临时开始变量,因为是以临时开始变量为key值进行交换,所以最后它的位置应该在最中间,左边都是比它小的,右边都是比它大的
	//(key这个值一直是最左的,临时开始变量是一直加的,到后面是临时开始变量到了最中间,所以key要跟它做位置互换,因为在这里是以key值为基准的左右对比)
	quicksort(array,left,tmpleft-1); //以最初变化后的左边进行相同的排序 (传值:刷组,数组开始下标,上一轮key值-1)
	quicksort(array,tmpleft+1,right); //以最初变化后的右边进行相同的排序 (传值:数组,上一轮key值+1,数结束下标)
}

int main(){
	int array[]={1,4,6,8,234,65,78,1123,56,5767,345,234,457,456,232,345,6};
	int length=sizeof(array)/sizeof(array[0]);

	quicksort(array,0,length-1);//传入数组,开始下标,结束下标
	
	for (int i = 0; i < length; ++i)
	{
		printf("array[%d]=%d\n",i,array[i] );	/* code */
	}
	return 0;
}





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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值