我的代码:
void quickSort(int array[], int last)
{
int middle = last / 2;
int i = 0, j = last;
while(i <= j)
{
while(array[i] < array[middle])
i++;
while(array[j] > array[middle])
j--;
if(i <= j)
{
swap(array[i], array[j]);
i++;
j--;
}
}
if(j > 0)
quickSort(array, j);
if(last > i)
quickSort(array + i, last - i);
}
int main()
{
int a[] = {10,9,8,7,6,100,5,4,3,2,1};
quickSort(a, 10);
return 0;
}
如果完成,我会在内存中看到下一个值:
{1, 6, 7, 8, 9, 10, 2, 3, 4, 5, 100}
我无法意识到我做对了什么。这段代码实际上是从某些来源复制和粘贴的,但我的修改输出的值不正确。
怎么了?
答案 0 :(得分:1)
您应该在每次迭代期间存储您的轴。你现在写它的方式可以在你继续通过数组时进行变异。在第一次迭代中,选择100作为枢轴,然后用j交换,然后1成为枢轴。这可能发生在你的所有迭代中。
答案 1 :(得分:0)
如果您需要,可以使用此功能:
void quicksort(int x[],int first,int last){
int pivot,j,temp,i;
if(first<last){
pivot=first;
i=first;
j=last;
while(i<j){
while(x[i]<=x[pivot]&&i<last)
i++;
while(x[j]>x[pivot])
j--;
if(i<j){
temp=x[i];
x[i]=x[j];
x[j]=temp;
}
}
temp=x[pivot];
x[pivot]=x[j];
x[j]=temp;
quicksort(x,first,j-1);
quicksort(x,j+1,last);
}
}
像这样调用这个函数
int main(){
int a[] = {10,9,8,7,6,100,5,4,3,2,1};
quicksort(a,0,10);
printf("Sorted elements: ");
for(i=0;i<11;i++)
printf(" %d",a[i]);
return 0;
}
答案 2 :(得分:0)
void qsort(int arr[], int fst, int last)
{
int i, j, pivot, tmp;
if (fst<last)
{
pivot = fst;
i = fst;
j = last;
while (i<j)
{
while (arr[i] <= arr[pivot] && i<last)
i++;
while (arr[j]>arr[pivot])
j--;
if (i<j)
{
tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
}
tmp = arr[pivot];
arr[pivot] = arr[j];
arr[j] = tmp;
qsort(arr, fst, j - 1);
qsort(arr, j + 1, last);
}
}
以下是代码中的问题 -
如果(i <= j)条件,则递增i并且递减j不是必需的并且如果不需要(j <0)条件并且还不需要(last> i)条件。< / p>