快速排序实现的最坏情况提示
Tip for worst case of quicksort implementation
我正在尝试实现快速排序,并找出最坏情况下的处理部分。当pivot选择数组中最大或最小的元素时,我陷入了算法的中间,不知道如何处理它。
#include <iostream>
void swap(int item1, int item2)
{
int temp = item1;
item1 = item2;
item2 = temp;
}
int partition(int array[], unsigned int left, unsigned int right)
{
int pivot = array[left];
int pivot_index = left;
for(++left, right; left <= right;)
{
if(array[left] >= pivot && array[right] < pivot)
swap(array[left], array[right]);
if(array[left] < pivot)
left++;
if(array[right] >= pivot)
right++;
}
swap(array[right], pivot_index);
return right;
}
void quicksort(int array[], unsigned int left, unsigned int right)
{
if(left < right)
{
int index = partition(array, left, right);
quicksort(array, 0, index - 1);
quicksort(array, index + 1, right);
}
}
int main()
{
int unsortedarray[] = {10, 0, 9, 3, 4, 5, 8, 1};
int length = sizeof(unsortedarray) / sizeof(int);
quicksort(unsortedarray, 0, length - 1);
for(unsigned int index = 0; index < static_cast<unsigned int>(length); ++index)
std::cout << unsortedarray[index] << std::endl;
return 0;
}
您的swap
正在使用要交换的值的本地副本;它没有对论点做出任何改变。
相关文章:
- 在没有太多条件句的情况下,我如何避免被零除
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 函数中堆分配的效果与缺少堆分配的情况
- 在未初始化映射的情况下,将值插入到映射的映射中
- 是默认情况下分配给char数组常量的值
- 为什么我不能在不创建字符串变量的情况下使用函数的字符串输出
- 如何在不产生任何垃圾的情况下获得C中的像素
- 在已经使用Git的情况下减少编译时间
- 为什么在Windows上的VS 2019和Clang 9中"size_t"在没有标题的情况下工作
- 如何在没有信号的情况下从C++执行QML插槽
- 如何在不知道向量大小的情况下输入向量内部的向量?
- 如何针对特定情况调试和修复此双自由内存损坏问题
- 为什么在某些情况下不写入此文件?
- 为什么Mat类的两个对象可以在不重载运算符+的情况下添加
- 我的项目如何在没有提示的情况下不抱怨未解决的未支出
- 快速排序实现的最坏情况提示
- 如何在不提示输入密码的情况下设置计划任务
- 在没有警告提示的情况下打开文件
- 在不提示UAC权限的情况下从c++应用程序运行NSIS安装程序
- 如何在不绑定工具的情况下使用Windows工具提示控件