C语言:用递归的方式对数组排序

Python012

C语言:用递归的方式对数组排序,第1张

#include <stdio.h>

#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)