#include <stdio.h>

void swap(int* a, int* b) { int temp = *a; *a = *b; *b = temp; }

void QuickSort(int* arr, int begin, int end) { //只有一个数或区间不存在 if (begin >= end) return; int left = begin; int right = end; //选左边为key int keyi = begin; while (begin < end) { //右边选小 等号防止和key值相等 防止顺序begin和end越界 while (arr[end] >= arr[keyi] && begin < end) { --end; } //左边选大 while (arr[begin] <= arr[keyi] && begin < end) { ++begin; } //小的换到右边,大的换到左边 swap(&arr[begin], &arr[end]); } swap(&arr[keyi], &arr[end]); keyi = end; //[left,keyi-1]keyi[keyi+1,right] QuickSort(arr, left, keyi - 1); QuickSort(arr, keyi + 1, right); }

int main() { int arr[] = { 5,2,7,3,9,4,6,1,8 }; int n = sizeof(arr) / sizeof(arr[0]); QuickSort(arr, 0, n - 1); for (int i = 0; i < n; ++i) { printf('%d ', arr[i]); } printf(' '); return 0; }

快速排序 Hoare 版本 (左右指针法) - C 语言实现

原文地址: https://www.cveoy.top/t/topic/nSKg 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录