快排的代码以及思路

该程序使用C语言实现了快速排序算法,通过选取基准数,分别从数组右边找小于基准的数和左边找大于基准的数进行交换,最终达到排序目的。递归处理左右子数组,能有效提高对大规模数据的排序效率,相比冒泡排序速度更快。
摘要由CSDN通过智能技术生成

//主要思想就是右边找比第一位小的,左边找比第一位大的,然后交换位置,最后将ij相遇时的数与首位换位,即可得到快排结果。通常有几位数就要走几趟,不过相对的,超一亿数据后比冒泡快了许多。

#include <stdio.h>

#include <stdlib.h>

int a[101],n=5;//定义全局变量,这两个变量需要在子函数中使用

void quicksort(int left,int right)

{

int i,j,t,temp;

if(left>right)

return;

temp=a[left]; //temp中存的就是基准数

i=left;

j=right;

while(i!=j)

{

//顺序很重要,要先从右往左找

while(a[j]>=temp && i<j)

j--;

//再从左往右找

while(a[i]<=temp && i<j)

i++;

//交换两个数在数组中的位置

if(i<j)//当哨兵i和哨兵j没有相遇时

{

t=a[i];

a[i]=a[j];

a[j]=t;

}

}

a[left]=a[i];

a[i]=temp;

quicksort(left,i-1);//继续处理左边的,这里是一个递归的过程

quicksort(i+1,right);//继续处理右边的,这里是一个递归的过程

}

int main()

{

int i,j,t;

//读入数据

for(i=1;i<=n;i++)

a[i]=rand()%10+1;

quicksort(1,n); //快速排序调用

//输出排序后的结果

for(i=1;i<=n;i++)

printf("%d ",a[i]);

return 0;

}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值