簡體   English   中英

Quicksort C ++實現不起作用

[英]Quicksort C++ Implementation not working

我正在嘗試使quicksort用於整數數組,但是由於某種原因,它無法正確排序。

#include <conio.h>
#include <iostream>

#include <stdlib.h>



using namespace std;
int partition(int * arr, int left, int right, int index);
int quicksort(int * arr, int left, int right);

int main(void){
    int arr[] = { 5,0,7,2,9,4,1,3,6,8 };


    quicksort(arr, 0, 9);
    for (int i = 0; i < 10; i++){
        cout << arr[i] << std::endl;
    }

}
int quicksort(int * arr, int left, int right){
    int pivot = 0;

    if (left < right){
        pivot = partition(arr, left, right, pivot);
            for (int i = left; i <= right; i++){
        cout << arr[i] << " ";
    }
    cout << std::endl;
        quicksort(arr, left, pivot - 1);
        quicksort(arr, pivot + 1, right);
    }
    return 0;
}

int partition(int *arr, int left, int right, int index){
    int pivotValue = arr[index];
    int storedIndex = left;
    int tmp;

    tmp = arr[index];
    arr[index] = arr[right];
    arr[right] = tmp;



    for (int i = left; i < right; i++){
        if (arr[i]<= pivotValue){
            tmp = arr[i];
            arr[i] = arr[storedIndex];
            arr[storedIndex] = tmp;


            storedIndex++;
        }
    }

    tmp = arr[storedIndex];
    arr[storedIndex] = arr[right];
    arr[right] = tmp;

    return storedIndex;





}

我遵循了WikiPedia Quicksort上的算法,但仍然無法正常工作。 我究竟做錯了什么??

0 2 4 1 3 5 8 9 6 7
0 2 4 1 3
0 4 1 2
1 3 4
2 9 6 8
6 7 9
8 0 1 3 4 5 2 6 7 9 
Press any key to continue . . .

您的數據透視元素始終是數組的第一個元素。 使用子數組調用quicksort或使用初始數據透視表索引調用它。 下面的代碼執行后者。

#include <iostream>
#include <stdlib.h>

using namespace std;
int partition(int *arr, int left, int right, int index);
int quicksort(int *arr, int left, int right, int pivot);

int main(void) {
  int arr[] = {5, 0, 7, 2, 9, 4, 1, 3, 6, 8};

  quicksort(arr, 0, 9, 0);
  for (int i = 0; i < 10; i++) {
    cout << arr[i] << std::endl;
  }
}
int quicksort(int *arr, int left, int right, int pivot) {
  //int pivot = 0;

  if (left < right) {
    pivot = partition(arr, left, right, pivot);

    quicksort(arr, left, pivot - 1, left);
    quicksort(arr, pivot + 1, right, pivot + 1);

  }
  return 0;
}

int partition(int *arr, int left, int right, int index) {
  int pivotValue = arr[index];
  int storedIndex = left;
  int tmp;

  tmp = arr[index];
  arr[index] = arr[right];
  arr[right] = tmp;

  for (int i = left; i < right; i++) {
    if (arr[i] <= pivotValue) {
      tmp = arr[i];
      arr[i] = arr[storedIndex];
      arr[storedIndex] = tmp;

      storedIndex++;
    }
  }

  tmp = arr[storedIndex];
  arr[storedIndex] = arr[right];
  arr[right] = tmp;

  return storedIndex;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM