#define N 8
void selection_sort(int a[], int n) {
int i, t, imax = 0
if(n < 1) return
for(i = 1 i < n ++i) {
if(a[imax] < a[i])
imax = i
}
if(imax != n - 1) {
t = a[n - 1]
a[n - 1] = a[imax]
a[imax] = t
}
selection_sort(a, n - 1)
}
int main(void) {
int i, a[N] = {8,5,4,6,1,2,3,7}
printf("排序前:\n")
for(i = 0 i < N i++)
printf("%d ", a[i])
printf("\n")
selection_sort(a, N)
printf("排序后:\n")
for(i = 0 i < N i++)
printf("%d ", a[i])
printf("\n")
return 0
}
大概看下,首先你是用自定义函数int partition进行排序,但是函数并没有返回值return。应该是这个问题报错的
while(a[++i]<x){}
while(a[--j]>x){if(j==left)break}
if(i<j)
swap(a[i],a[j])
else break
这段就不明白了,首先是获取由左数第一个比X大的数,然后又获取从右数第一个比X大的数,然后对两个数字的下标进行比较,这样很容易陷入死循环。
quickSort(a,left,p-1)
quickSort(a,p+1,right)