快速排序 C语言

tech2025-09-17  52

快速排序 C语言

      LeetCode题型:待补充

#include<stdio.h> #include<stdlib.h> void swap(int *nums, int i, int j) { int temp = nums[i]; nums[i] = nums[j]; nums[j] = temp; } int partition(int *nums, int low, int high)//分治 { int pivotkey; pivotkey = nums[low]; //用子表的第一个记录作枢轴记录 while (low < high) //从表的两端交替向中间扫描 { while (low < high && nums[high] >= pivotkey) high--; swap(nums, low, high); //将枢轴记录小的记录交换到低端 while (low < high && nums[low] <= pivotkey) low++; swap(nums, low, high); //将比枢轴记录大的记录交换到高端 } return low; //返回枢轴所在位置 } int partition2(int *nums, int low, int high){ int key = nums[low]; while(low < high){ while(low < high && nums[high] >= key){ high--; } nums[low] = nums[high]; while(low < high && nums[low] < key){ low++; } nums[high] = nums[low]; } nums[low] = key; return low; } void QSort(int *nums, int low, int high) { int pivot; if (low < high) { //pivot = partition(nums, low, high); //算出枢轴值pivot pivot = partition2(nums, low, high); //两种都可以 QSort(nums, low, pivot-1); //对低子表递归排序 QSort(nums, pivot+1, high); //对高子表递归排序 } } void PrintNums(int * nums, int len){ for(int i = 0; i < len; i++){ printf("%d ", nums[i]); } printf("\n"); } void main(){ int nums[] = { 1, 3, 1, 4, 5}; int len = sizeof(nums)/sizeof(int); PrintNums(nums, len); QSort(nums, 0, len-1); PrintNums(nums, len); }
最新回复(0)