2016-03-08 81 views
0

我写了一个代码,它接受一个存储在数组中的n个数字的输入。然后,代码将从最低到最高排列这n个数字。我在使用我的交换功能来订购数字时遇到了麻烦。我的其他两个函数将调用交换函数,所以我将包含它以显示更多我正在做的事情。程序从最低到最高排序用户输入数组。 C编程

void swap(int array[], int index1, int index2) { 
    *array = index1; 
    index1 = index2; 
    index2 = *array; 
} 

void quicksort(int array[], int low, int high) { 
    if (low<high) 
    { 
     int pivot = partition(array, low, high); 
     quicksort(array, low, pivot - 1); 
     quicksort(array, pivot + 1, high); 
    } 
} 

int partition(int array[], int low, int high) { 
    int pivot = array[high]; 
    int i = low; 
    int j; 
    for(j=low; j<high-1; j++) 
    { 
     if(array[j] == pivot) 
     { 
     swap(array,i,j); 
     i = i+1;  
     }  
    } 
    swap(array, i, high); 
    return i; 
} 

**** **** EDIT

我已经写,取入存储到数组n个数字的输入的代码。然后,代码将从最低到最高排列这n个数字。我在使用我的交换功能来订购数字时遇到了麻烦。我的其他两个函数将调用交换函数,所以我将包含它以显示更多我正在做的事情。

void swap(int array[], int index1, int index2) { 
    *array = index1; 
    index1 = index2; 
    index2 = *array; 
} 

void quicksort(int array[], int low, int high) { 
    if (low<high) 
    { 
     int pivot = partition(array, low, high); 
     quicksort(array, low, pivot - 1); 
     quicksort(array, pivot + 1, high); 
    } 
} 

int partition(int array[], int low, int high) { 
    int pivot = array[high]; 
    int i = low; 
    int j; 
    for(j=low; j<high-1; j++) 
    { 
     if(array[j] <= pivot) 
     { 
     swap(array,i,j); 
     i = i+1;  
     }  
    } 
    swap(array, i, high); 
    return i; 
} 

回答

1

交换功能是错误的。你的意思是

void swap(int array[], int index1, int index2) { 
    int temp = array[index1]; 
    array[index1] = array[index2]; 
    array[index2] = temp; 
} 
+0

谢谢。这比我所做的更好。在我的代码中仍然有一个错误,但我现在更接近完成。 – Shaunbaum

+0

通过调试器一步一步通过 – pm100

+0

我现在全部想出来了,再次感谢! – Shaunbaum

0

成品和正确的功能

void swap(int array[], int index1, int index2) { 
    int temp = array[index1]; 
    array[index1] = array[index2]; 
    array[index2] = temp; 
} 

void quicksort(int array[], int low, int high) { 
    if (low<high) 
    { 
     int pivot = partition(array, low, high); 
     quicksort(array, low, pivot - 1); 
     quicksort(array, pivot + 1, high); 
    } 
} 

int partition(int array[], int low, int high) { 
    int pivot = array[high]; 
    int i = low; 
    int j; 
    for(j=low; j<=high-1; j++) 
    { 
     if(array[j] <= pivot) 
     { 
     swap(array,i,j); 
     i = i+1;  
     }  
    } 
    swap(array, i, high); 
    return i; 
}