0
我正在測試C中的快速排序代碼(它計算此函數在排序時必須進行的交換次數),該代碼不能提供正確的結果。
我縮小到我的交換功能。當交換功能得到第一個= 3和第二個= 3.它的最終結果變成第一個= 0和第二個= 0.
當分開測試此功能工作正常。下面是代碼
交換功能與快速排序代碼無法正常工作
#include<stdio.h>
#define SIZE 5
int arr[SIZE];
void quicksort(int start, int end);
long int answer = 0;
int main(){
int i, input;
for(i = 0; i < SIZE; i++){
scanf("%d",&arr[i]);
}
quicksort(0, SIZE - 1);
printf("%ld\n", answer);
return 0;
}
void quicksort(int start, int end){
void swap(int * first, int * second);
int partition(int start, int end);
int pos;
if(start >= end)return;
else{
pos = partition(start, end);
quicksort(start, pos - 1);
quicksort(pos + 1, end);
answer += (end - start);
}
}
void swap(int * first, int * second){
printf("start = %d , end = %d\n",*first, *second);
*first = *first^*second;
*second = *first^*second;
*first = *first^*second;
printf("start = %d , end = %d\n",*first, *second);
}
int findpivot(int start, int end){
return start;
}
int partition(int start, int end){
int findpivot(int start, int end);
int i = 0;
int pivot_pos = findpivot(start, end);
int pivot = arr[pivot_pos];
int pos = pivot_pos + 1;
for(i = pivot_pos + 1 ; i <= end; i++){
if(arr[i] <= pivot){
swap(&arr[i], &arr[pos]);
pos++;
}
}
pos--;
for(i = 0; i < SIZE; i++){
printf("%d ",arr[i]);
}
printf("\n");
swap(&arr[pivot_pos], &arr[pos]);
for(i = 0; i < SIZE; i++){
printf("%d ",arr[i]);
}
printf("getting out\n");
return pos;
}
爲什麼使用XOR(^)作爲交換功能?爲什麼不像'int temp = * first; * first = * second; * second = temp;' –
您還在其他函數中聲明瞭函數原型,這些函數原型需要在全局範圍內定義。 –
我知道第二個選擇,但我想知道爲什麼這不起作用。至於函數原型,我已經使用了由Ritchie編寫的C編程書籍的風格。 –