快速排序 数组 函数 c语言,书上快速排序程序中子函数是怎样更改数组的?理论上不可实现啊...
該樓層疑似違規已被系統折疊?隱藏此樓查看此樓
return不可能返回數組,于是子hanshu1quicksort最后沒有用return,但是沒有return又怎么可以更改a[N]?主函數中的quicksort(a, 0, N - 1);將a[N]復制后傳遞給形參a,quicksort(a, 0, N - 1);應該是只對a[N]的副本進行排序,最后輸出的順序應該和輸入的一樣,相當于沒有排,但是結果卻是排了,這是怎樣實現的?和理論不是矛盾嗎?
/*********************************************************
* From C PROGRAMMING: A MODERN APPROACH, Second Edition *
* By K. N. King *
* Copyright (c) 2008, 1996 W. W. Norton & Company, Inc. *
* All rights reserved. *
* This program may be freely distributed for class use, *
* provided that this copyright notice is retained. *
*********************************************************/
/* qsort.c (Chapter 9, page 207) */
/* Sorts an array of integers using Quicksort algorithm */
#include
#define N 10
void quicksort(int a[], int low, int high);
int split(int a[], int low, int high);
int main(void)
{
int a[N], i;
printf("Enter %d numbers to be sorted: ", N);
for (i = 0; i < N; i++)
scanf("%d", &a[i]);
quicksort(a, 0, N - 1);
printf("In sorted order: ");
for (i = 0; i < N; i++)
printf("%d ", a[i]);
printf("\n");
return 0;
}
void quicksort(int a[], int low, int high)
{
int middle;
if (low >= high) return;
middle = split(a, low, high);
quicksort(a, low, middle - 1);
quicksort(a, middle + 1, high);
}
int split(int a[], int low, int high)
{
int part_element = a[low];
for (;;) {
while (low < high && part_element <= a[high])
high--;
if (low >= high) break;
a[low++] = a[high];
while (low < high && a[low] <= part_element)
low++;
if (low >= high) break;
a[high--] = a[low];
}
a[high] = part_element;
return high;
}
總結
以上是生活随笔為你收集整理的快速排序 数组 函数 c语言,书上快速排序程序中子函数是怎样更改数组的?理论上不可实现啊...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 48道C语言上机题参考答案,二级C语言上
- 下一篇: 整数因子分解c语言递归,整数因子分解:计