快速排序

mac2026-08-18  2

C语言

#include<stdlib.h> #include<string.h> #define N 10 void quickSort(int a[], int start, int end) { int base, middle; int tempStart = start, //备份作用,保留头尾的数值。因为索引start和end会移动改变。用在递归调用的参数。 tempEnd = end; //对于这种递归的函数,内部必须要有一个函数返回的条件 if (tempStart >= tempEnd) { return; } base = a[start]; //设置基准数 while (start < end) { while (start < end && a[end] > base) { end--; } /* if (start < end) { int t; t = a[start]; a[start] = a[end]; a[end] = t; start++; } */ a[start] = a[end] while (start < end && a[start] < base) { start++; } /* if (start < end) { int t; t = a[start]; a[start] = a[end]; a[end] = t; end--; } */ a[end] = a[start] } a[start] = base; //将开头的基准数赋值给此时start指向的位置,即成为分割点,左边为<该数的值,右边为》该数的值 middle = start; //将此时的start索引变成切分两部分的中间索引 // 递归调用 quickSort(a, tempStart, middle - 1); quickSort(a, middle + 1, tempEnd); } int main() { int a[N] = { 12,54,84,1,3,6,0,98,120,10 }; //调用函数,传入参数:数组名,头索引,尾索引 quickSort(a, 0, N - 1); for (int i = 0; i<N; i++) printf("%5d", a[i]); system("pause"); }

python 递归

def quick_sort(array): if len(array) < 2: return array mid = array[0] # leftarray = [] # rightarray = [] # for x in array[1:]: # if x >= mid: # rightarray.append(x) # else: # leftarray.append(x) # 以上注释部分也可用以下替换 leftarray = [x for x in array[1:] if x <= mid] rightarray = [x for x in array[1:] if x > mid] return quick_sort(leftarray) + [mid] + quick_sort(rightarray) array = [7, 5, 96, 2] print(quick_sort(array))

非递归(C语言风格) 按照c语言修改即可

最新回复(0)