c语言数组排序编程,C语言实现数组快速排序(含对算法的详细解释)

本文通过详细步骤解析C语言实现快速排序的过程,包括代码分析和实例展示,旨在帮助读者理解快速排序算法的工作原理。文章末尾邀请读者自行验证代码,并欢迎指出可能存在的问题,以共同探讨和学习。
摘要由CSDN通过智能技术生成

/*

说明:

代码参考过网上代码,但分析为个人原创,本贴重在说明快速排序算法的思想和运行过程。

*/

代码部分:

#include

#include

void quickSort(int* arr,int startPos, int endPos)

{

int i, j;

int key;

key = arr[startPos];

i = startPos;

j = endPos;

while (i

{

while (arr[j] >= key && i

arr[i] = arr[j];

while (arr[i] <= key && ikey或遍历完

arr[j] = arr[i];

}

arr[i] = key;

if (i - 1>startPos) quickSort(arr, startPos, i - 1); //————1 如果key前还有两个及以上的数,排key前的数(有一个的话自然就不用排了)

if (endPos>i + 1) quickSort(arr, i + 1, endPos);//————2 如果key后还有两个及以上的数,排key后的数

}

int main()

{

int a[11], i;

for (i = 0; i<11; i++)

scanf_s("%d", &a[i]);

quickSort(a, 0, 10);

for (i = 0; i<11; i++)

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

printf("\n");

return 0;

}

解析部分:

/*

以数组  a[0] a[1]  a[2]  a[3]  a[4]  a[5]  a[6]  a[7]  a[8]  a[9]  a[10]

0    2     32    39    23    45    36    57    14    27    39      为例,说明核心代码的实现机制

第一轮:

首先进入quickSort(a, 0, 10); key=0,i=0,j=10,进入外层while,进入第一个内层while,由于0是数组中最小的,故j一直扫到头,j=0,arr[0] = arr[0]=0;

显然无法进入第二个内层while,由于i=j=0,结束外层while,执行a[0]=key=0;显然不进入第一个if,进入第二个if,执行quickSort(a, 1, 10);进行从a[1]到

a[10]的排序,第一轮结束。

第二轮;

执行quickSort(a, 1, 10),key=2,i=1,j=10,进入外层while,进入第一个内层while,由于2是传入段中最小的&

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值