前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >数组快速排序

数组快速排序

作者头像
我与梦想有个约会
发布2023-10-20 16:15:51
1020
发布2023-10-20 16:15:51
举报
文章被收录于专栏:jiajia_deng

快速排序是在数据源中抽取一份数据作为样本,与所有需要排列的数据进行对比,根据需要把比样本小的数据放置到数据源的左侧位置,比样本大的数据放置到数据源的右侧位置。以此来对数据进行排序。具体实现如下:

代码语言:javascript
复制
// 抽取一个元素与所有元素对比,比样本小的置左,比样本大的置右
int findPos(int *arr, int low, int high)
{
// 抽取第一个元素
int nIndex = arr[low];
// 判断low务必小于high才执行操作
while (low < high)
{
// 从最后一个元素比较,如果大于样本数则向前移动,并且low一定要小于high
// 当条件不成立时跳出while,证明这个元素小于样本数
while (arr[high] >= nIndex && low < high)
high–;
// 跳出后将小于样本的元素赋给第一个元素空出来的位置
arr[low] = arr[high];
// 从第一个元素比较,如果小于样本数则向后移动,并且low一定要小于high
// 当条件不成立时退出while,证明这个元素大于样本数
while (arr[low] <= nIndex && low < high)
low++;
// 跳出后将大于样本的元素赋给之前赋值给第一个元素后空出来的高位位置
arr[high] = arr[low];
}
// 如果以上循环结束,则low与high一定相等。
// 此时low与high处于小数和大数中间,将数组第low个元素赋值为样本数即可
arr[low] = nIndex;
return low;
}
 
void quickSort(int *arr, int low, int high)
{
// 判断low必须小于high
if (low < high)
{
// 记录第一次抽取样本数后样本数的位置
int pos = findPos(arr, low, high);
// 将样本数左侧的数字再次比较,持续递归
quickSort(arr, low, pos - 1);
// 将样本数右侧的数组再次比较,持续递归
quickSort(arr, pos + 1, high);
}
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2015-05-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档