-1
一直在嘗試幾個小時才能找到這段代碼出了什麼問題,並且所有mergesort的算法我一直在使用,看起來幾乎相同,這個不起作用; 試圖對指針數組進行mergesort:Mergesort不起作用
輸出: 2 | 2 | 3 | 3 | 4 | 5 | 4 | 4 | 7 | 7 |
#include <stdlib.h>
#include <stdio.h>
void merge(int ** pointerArray, int pivot,int size){
int leftSize=pivot;
int rightSize=size;
int leftIndex=0, rightIndex=pivot, newIndex=0;
int **tempArray= (int **)malloc(sizeof(int *)*size);
while (leftIndex < leftSize && rightIndex < rightSize) {//merging two sorted array
if ((*pointerArray)[leftIndex]<=(*pointerArray)[rightIndex])
(tempArray)[newIndex++]=(pointerArray)[leftIndex++];
else
(tempArray)[newIndex++]=(pointerArray)[rightIndex++];
}
while (leftIndex<leftSize)//rest of left array
(tempArray)[newIndex++]=(pointerArray)[leftIndex++];
while (rightIndex<rightSize)//rest of right array
(tempArray)[newIndex++]=(pointerArray)[rightIndex++];
for (int i=0; i<size; i++)//copying the tempArray to the original array
pointerArray[i]=tempArray[i];
free(tempArray);
}
void mergeSort(int ** ptrarray, int size){
if (size==1)
return;
int pivot=size/2;
mergeSort(ptrarray, pivot);
mergeSort(ptrarray+pivot, size-pivot);
merge(ptrarray, pivot, size);
}
int** pointerSort(int* arr, unsigned int size,
char ascend_flag)
{
int **pointerArray= (int **)malloc(sizeof(int *)*size);
for (int i=0; i<size; i++)
pointerArray[i]=&arr[i];
mergeSort(pointerArray, size);
return pointerArray;
}
int main()
{
int size=10;
int array[10]={3,2,3,5,4,7,2,7,4,4};
char ascend_flag =1;
int ** pointer= pointerSort(array, size, ascend_flag);
for (int **p=pointer; p-pointer<size; p++)//print sorted array
printf(" %d|", *(*p));
}
那你發現當你調試你的代碼? – 2014-11-23 15:01:41
只有一個迭代,合併函數正在比較7到1710702629(垃圾值,我猜)pointerArray [1] <= pointerArray [4]之一。我不知道爲什麼,我試圖確保我正確地分割數組,並且一切都很好。 – 2014-11-23 15:18:43