在C++中使用布尔数组

0 c++ arrays sorting boolean quicksort

美好的一天!我们被要求对一个布尔数组进行排序,但问题是当我运行我的程序时,它总是停止工作.我尝试在布尔数组中打印值并打印它们但是当我尝试注入快速排序功能时,未排序的值不再打印,也不对数组进行排序.此代码对除Boolean之外的不同数据类型进行了排序 我希望你能帮我找到问题所在.谢谢.

void swap(bool &a, bool &b)
{
  int temp;
  temp = a;
  a = b;
  b = temp;
}

void sortArray(bool* arr, int start, int end)
{
   int pivot = arr[start];
   int p;

   if(end > start)
   {
     p = partition(arr, pivot, start, end);
     arr[p] = pivot;
     sortArray(arr, start, p);
     sortArray(arr, p+1, end);
   }

}

int partition(bool* arr, int pivot, int start, int end)
{
  int header = start;
  int p = end;

  while(header < p)        
  {
    while( pivot < arr[p] && p > header)   
    {
        p=p-1;            
    }
    swap(arr[header], arr[p]);


    while( pivot >= arr[header] && header < p)    
    {
       header++;            
    }
    swap(arr[p], arr[header]);

   }
   return header;
}
Run Code Online (Sandbox Code Playgroud)

Gre*_*ape 5

布尔类型在这里有一个优势.你可以简单地计算trues的数量.

在哪种情况下,排序函数应如下所示:

void sortArray(bool* arr, int start, int end)
{
    int true_count = 0;
    for (int i = start; i != end; ++i) {
        if (arr[i]) {
            ++true_count;
        }
    }

    int true_range_end = start + true_count;

    // Here go true
    for (int i = start; i != true_range_end; ++i) {
        arr[i] = true;
    }

    // Here go false
    for (int i = true_range_end; i != end; ++i) {
        arr[i] = false;
    }
}
Run Code Online (Sandbox Code Playgroud)

请注意,这是降序(true先行).