2014-01-28 49 views
-1

C++ - 仅使用无符号整数实现快速排序?

std::vector<unsigned int> numbers; 

这就是充满数字和需求不使用任何INT变量被quickSorted - 仅unsigned int类型是允许的。

当我将所有“int”转换为“unsigned int” 时,由于0-1情况,所有我见过的quickSort示例中断。

编辑:这里是一个例子

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

实施例以上的段错误,因为j--;成为一个庞大的数字,并且(我< = j)保持为真。不能看到如何解决它。

任何人都知道如何使用unsigned int来实现quickSort?

+2

如果您看到错误来自哪里,您应该可以自己解决问题。没有看到它就很难猜测你的代码。 – dasblinkenlight

+6

这里是我如何做到这一点:1.获得一个C++ stdlib实现,其中'std :: sort'被实现为一个快速排序; 2.'std :: sort(numbers.begin(),numbers.end());' – 2014-01-28 18:16:41

+2

什么是0-1情况?显示您无法解决如何更换的特定代码。我不明白为什么QuickSort实现会在任何地方使用负数。 –

回答

0

如果您查看您链接到的包含关键点描述的页面,则会错误地实施该页面。这可能导致找不到主轴并且j变得小于0.如果主轴正确选择为包含在该范围内的数字,我认为该算法也可以与无符号整数一起使用。