扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
1.快速排序原理
金凤网站制作公司哪家好,找成都创新互联公司!从网页设计、网站建设、微信开发、APP开发、成都响应式网站建设公司等网站项目制作,到程序开发,运营维护。成都创新互联公司自2013年创立以来到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选成都创新互联公司。快速排序是在冒泡排序上进行的改进,思路如下:
在待排序中的元素随意选一个元素作为基准,一般都是以第一个元素为基准元素。
将元素进行分区,比基准元素元素大的放在其右边,比其小的放在基准元素的左边。
对各个分区重复上述的步骤直到所有元素为有序的。
2.图解如下:
(1)把第一个元素作为基准元素,用于比较进行分区,比基准元素元素大的放在其右边,比基准元素小的放在其左边,设置low索引,用来搜索比基准元素小的,设置high索引,用来搜索比基准元素大的元素。
(2)从high索引从右往左依次扫描,5和基准元素6进行比较,5<6, 则将5放在low索引处,之后将low索引右移,操作后数据如下:
(3)从low索引从左往右扫描,4和基准元素6进行比较,4<6,low索引继续右移动,操作后如下:
(4)继续从low从左往右扫描,2和基准元素进行比较,2<6,low索引继续向右移动,操作后如下图:
(5)继续从low索引处从左往右扫描,9和基准元素进行比较,9>6, 这时将9赋值给high索引处,之后high索引进行向左移动一个元素,操作后如下图:
(6)从high索引处从右往左扫描,8和基准元素进行比较,8>6,此时high继续左移一个元素,这是low索引和high索引指向同一个元素,将基准元素6赋值到low索引处,操作后如下图:
此时low索引和high索引相同,第一轮排序结束,你会发现,比基准元素小的都在其左边,比基准元素大的都在其右边。之后对左右俩个区域重复上述操作直到所有元素为有序。
3.快速排序的实现
C语言实现代码如下:
void quickSort(int arr[], int low, int high)
{
int first = low;
int last = high;
int key = arr[first];//设置第1个数为 key,备份
if(low >= high)
return;
//一轮的调整(比 key 大的放在右边, 比 key 小的放在左边)
while(first< last)
{
//从右往左,找到比key 小的数放到 first 位置,找到比 key 大的数,继续往左移动
while(first< last && arr[last] >key)
{
last--;
}
//将左边比基准值小的赋值到 last 索引位置
arr[first] = arr[last];
//从左往右,找到比 key 大的数放到 last 位置
while(first< last && arr[first]< key)
{
first++;
}
//将右边比基准值大的赋值到 first 索引位置
arr[last] = arr[first];
}
arr[first] = key;//一轮结束后
quickSort(arr,low,first - 1);//对前面一半进行排序
quickSort(arr,first + 1,high);//对后面一半进行排序
}
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流