学习日志(十二)

函数递归-快速排序

快速排序

算法的核心思想是挑出一个元素作为基准。

快速排序的步骤

(1)从数列中挑出一个元素,称为 "基准"(pivot);

(2)重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partition)操作;

(3)递归地把小于基准值元素的子数列和大于基准值元素的子数列排序;

#include <stdio.h>

//交换算法 通过指针交换两个数

void swap(int* x, int* y) {

int t = *x;

*x = *y;

*y = t;

}

void QuickSortRecursive(

int arr[], int start)

if (start ≥ end)

return;

int mid=arr[end];

int left = start, right = end - 1;

while (left < right) {

while (arr[left] < mid && left < right)

left++;

while (arr[right] ≥ mid && left<right

right--;

swap(&arr[left],&arr[right]);

if[arr[left]≥arr[end]]

swap(&arr[left],&arr[end]);

else

left++;

if (left)

QuickSortRecursive(arr, start, left - 1)

QuickSortRecursive(arr, left + 1,end);

}

void QuickSort(int arr[], int len){

QuickSortRecursive(arr, 0, len - 1);

int main()

//需要归并排序的数组

int arr[]= { 1,1,4,5,1,4,19,19,810 };

//传入数组arr的首地址进行排序

QuickSort(arr,sizeof(arr)/ sizeof(int));

//排序完成后顺序输出排序结束后的arr数组

for (int i = 0; i ≤ 9; i++) {

printf("%d",arr[i]);

}

return 0;

}

全部评论

相关推荐

评论
点赞
收藏
分享
牛客网
牛客企业服务