快速排序算法

本文深入解析了快速排序算法的核心步骤,包括初始化指针、选择关键数据、比较与交换元素等,详细介绍了每一步的操作逻辑及具体实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//快速排序算法
//快速排序算法运用了递归原理
//一趟快速排序的算法是:
//1)设置两个变量i、j,排序开始的时候:i=0,j=N-1;
//2)以第一个数组元素作为关键数据,赋值给key,即key=A[0];
//3)从j开始向前搜索,即由后开始向前搜索(j--),找到第一个小于key的值A[j],将A[j]和A[i]互换;
//4)从i开始向后搜索,即由前开始向后搜索(i++),找到第一个大于key的A[i],将A[i]和A[j]互换;
//5)重复第3、4步,直到i=j; 
//(3,4步中,没找到符合条件的值,即3中A[j]不小于key,4中A[i]不大于key的时候改变j、i的值,使得j=j-1,i=i+1,直至找到为止。
//找到符合条件的值,进行交换的时候i, j指针位置不变。另外,i==j这一过程一定正好是i+或j-完成的时候,此时令循环结束)。
以下为算法的具体实现:

void quit_sort(int *numb, int left_index, int right_index)
{
if(left_num >= right_num)
{
return; //如果左索引大于或等于右索引,则说明整理完一组,返回
}

int i = left_index;
int j = right_index;
int key = numb[left_index]; //为比较值赋初值

while(i<j)
{
while((i<j) && (key<numb[j]))
{
j--; //如果numb[j]>key则继续向左寻找比key大的值
}
numb[i] = numb[j]; //将比key小的数赋给numb[i],如果i=j了,则为numb[i] = numb[i],不会对结果造成影响

while((i<j) && (key >= numb[i]))
{
i++; //如果numb[i]<=key则继续向右寻找比key小的值
}
numb[j] = numb[i]; //将比key大的数赋给numb[j];
}

numb[i] = key;
quit_sort(numb, left_index, i-1); //由于numb[i]为中间值,比其大的在右边比其小的在左边,因此numb[i]的值不需要在去比较
quit_sort(numb, i+1, right_index);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值