快速排序算法

快速排序

想必如果你学了递归,那快速排序也是必不可少的内容;
接下来就简单介绍一下快速排序。

快速排序:是对冒泡排序算法的一种改进,基本思想是:将整个要排序的数据分割成两个部分,其中一部分要比另一部分要小,依照此方法对分成的两部分数据在进行运算,形成递归,就可以使整个数组变成一个有序的序列。
话不多说进入正题。

首先去一段要排序的数组:

array[]={12,34,128,90,36,68,66,234,801};

去一个中间的作为划分的依据

{12,34,128,90,36,68,66,234,801}

array[mid]=36

设置函数 void quick_sort(int array[],int left,int right)
将函数的头赋值给 left 将函数的尾赋值给right;
交换过程//按从小到大
1.如果左边的值比中间值小 则 i 继续加一 直到 左值比中间值大,
2.如果右边的值比中间值大 则 j 继续减一 直到 右值比中间值小,
3.其中判断条件 i<=j说明 其中左边的值比中间值大,右边的值比中间值小
则进行交换 借助一个中间值 temp,直到 i>j

while(i<=j)
	{
		while(array[i]<array[mid])
		{
			i++;
		}
		while(array[j]>array[mid])
		{
			j--;
		}
		if(i<=j)
		{
			temp=array[i];
			array[i]=array[j];
			array[j]=temp;
			i++;
			j--;
		}
	}

当循环条件执行完 说明 i>j 形成两部分数据接下来再执行

if(j>left)
	quick_sort(array,left,j);
if(i<right)
	quick_sort (array,i,right);

j的值在左边,i的值在右边
但继续遍历的条件 j的值比最左边的值要大
i的值比最右边的值要小 最后进行递归运算

整理的c代码

//快速排序
#include<stdio.h>
void quick_sort(int array[],int left,int right);
void quick_sort(int array[],int left,int right)
{
	int i=left;
	int j=right;
	int mid=(i+j)/2,temp;
	while(i<=j)
	{
		while(array[i]<array[mid])
		{
			i++;
		}
		while(array[j]>array[mid])
		{
			j--;
		}
		if(i<=j)
		{
			temp=array[i];
			array[i]=array[j];
			array[j]=temp;
			i++;
			j--;
		}
	}
	if(j>left)
	
		quick_sort(array,left,j);
	if(i<right)
		quick_sort (array,i,right);
	}
int main()
{
	int array[]={12,34,128,90,36,68,66,234,801};
	int length;
	int k; 
	length=sizeof(array)/sizeof(array[0]);
	quick_sort( array,0,length-1);
	printf("最终排序结果:"); 
	for(k=0;k<length;k++)
	printf("%5d",array[k]); 

	return 0;
 } 

最终结果

经过学习和了解以上是我对 快速排序的拙见。
还有很多不足之处,望多指教,多留言。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值