未对数组进行更改或保留

时间:2014-03-05 04:41:00

标签: c++ arrays

家庭作业的一部分是在c ++中用功能风格编写快速排序'。我在大多数情况下都解决了代码问题,但我遇到的唯一问题是数组的更改并未停留。这是我的代码,我知道它可能不完全像函数式编程,但我的老师说这很好:

#include <stdio.h>
#include <iostream>

void swap(int* x, int* y);
int partition(int arr[], int low, int high, int cursor);
void quickSort(int A[], int start, int end);

int main(){
    int list[20] = {20, 5, 12, 11, 1, 6, 18, 7, 2, 3, 14, 19, 10, 4, 13, 8, 15, 9, 17, 16};
    quickSort(list,0,19);
    for(int count =0; count<20; count++){
        std::cout<< list[count] << " ";
    }

};

void swap(int* x, int* y){
    int temp = *x;
    *x = *y;
    *y = temp;
};

int partition(int arr[], int low, int high, int cursor){
    if(low == high){
        swap(&arr[cursor+1], &arr[high]);
        return cursor+1;
    }else if(arr[low] <= arr[high]){
        swap(&arr[cursor+1], &arr[low]);
        return partition(arr, low+1, high, cursor+1);
    }else if(arr[low] > arr[high] && low != high){
            return partition(arr, low+1, high, cursor);
    }
};

void quickSort(int A[], int start, int end){
    if(start < end){
        int p = partition(A, start, end, start-1);
        quickSort(A, start, p-1);
        quickSort(A, p+1, end);
    }
};

1 个答案:

答案 0 :(得分:0)

感谢timrau指出丢失的条件,我的问题得到解决。一个愚蠢的菜鸟错误,我将在以后踢自己。谢谢。如果其他人可能遇到这样的问题,我为解决问题而添加的代码就是:

else if(arr[low] > arr[high] && low != high){
    return partition(arr, low+1, high, cursor);
}