C - 仅使用未签名整数实现QuickSort
C++ - Implementing quicksort using unsigned integers only?
我有
std::vector<unsigned int> numbers;
多数民众赞成到充满了数字,并且需要在不使用int索引的情况下快速进行快速划分 - 仅允许无符号int作为向量索引。
当我将所有" int"转换为" unsigned int"时,我看到的所有QuickSort示例在某些情况下,由于索引可能为-1(由于J-)。
编辑:这是一个示例
void quickSort(std::vector<unsigned int> &numbers, unsigned int left, unsigned int right) {
unsigned int i = left, j = right;
unsigned int tmp;
unsigned int pivot = numbers.size()/2;
/* partition */
while (i <= j) {
while (numbers[i] < pivot)
i++;
while (numbers[j] > pivot)
j--;
if (i <= j) {
tmp = numbers[i];
numbers[i] = numbers[j];
numbers[j] = tmp;
i++;
j--;
}
};
/* recursion */
if (left < j)
quickSort(numbers, left, j);
if (i < right)
quickSort(numbers, i, right);
}
修改版本的版本:http://diogopinho.hubpages.com/hub/easy-quicksort-with-examples
上方的示例segfaults是因为如果j是未签名的int并变为0,则j-成为一个巨大的数字(0xffffffff),并且(i&lt; = j)始终是正确的。有人知道如何仅使用Unsigned Int索引实现QuickSort吗?
如果您查看包含枢轴描述的页面,则它是错误实现的。这可能会导致枢轴找不到,而j变得少于0。如果正确选择了枢轴作为范围内包含的数字,我认为该算法也可以与无签名的整数一起使用。
这篇文章很旧,但是如果某人仍然有需要,他可以找到可以在此处容忍无符号int索引的实现
int partition(int *a,int start,int end)
{
int pivot=a[end];
//P-index indicates the pivot value index
int P_index=start;
int i,t; //t is temporary variable
//Here we will check if array value is
//less than pivot
//then we will place it at left side
//by swapping
for(i=start;i<end;i++)
{
if(a[i]<=pivot)
{
t=a[i];
a[i]=a[P_index];
a[P_index]=t;
P_index++;
}
}
//Now exchanging value of
//pivot and P-index
t=a[end];
a[end]=a[P_index];
a[P_index]=t;
//at last returning the pivot value index
return P_index;
}
void Quicksort(int *a,int start,int end)
{
if(start<end)
{
int P_index=partition(a,start,end);
Quicksort(a,start,P_index-1);
Quicksort(a,P_index+1,end);
}
}
相关文章:
- 如何实现容纳整数和无效指针的双向链表?
- 自定义哈希表实现-将字符串映射到整数时出现内存错误
- 独立于实现的浮点/整数转换
- c++反向整数序列实现
- 为什么这个新的 [ ] 和删除 [ ] 实现会分解为 12 >整数?
- 整数到字符实现
- 如何使用 c++ 模板实现整数、字符串、浮点数和日期对象的数组
- 整数序列实现C++
- 如何将自己的链表实现从存储整数更改为存储个人数据
- 实现整数除法向上舍入的正确方法是什么?
- 有符号整数和无符号整数C++的实现差异
- 如何从uint8_t的缓冲区读取带符号整数,而不调用未定义或实现定义的行为
- 使用递归实现 pow(A, B) % C,其中 A、B 和 C 是正整数
- 在C++中实现 CTR 加密模式时,CTR 加上 64 位整数
- 快速实现大整数计数器(在C/C 中)
- 在C++11中实现共享整数计数器而不使用互斥的最简单方法:
- 如何使用 C++11 实现指向整数的指针的原子增量<atomic>?
- C - 仅使用未签名整数实现QuickSort
- 高效实现 64 位和 32 位无符号整数之间的双向映射
- 枚举在内部作为整数实现.那为什么会给出错误