快速排序(C语言版本)

xiaoxiao2021-02-28  82

基本思想:选择一个基准元素,通常选择第一个元素或者最后一个元素,通过一趟扫描,将待排序列分成两部分,一部分比基准元素小,一部分大于等于基准元素,此时基准元素在其排好序后的正确位置,然后再用同样的方法递归地排序划分的两部分。

代码:

#include<stdio.h> #include<math.h> #include<windows.h> int main() { int a[] = {49,38,65,97,76,13,27,49,78,34,12,64,5,4,62,99,98,54,56,17,18,23,34,15,35,25,53,51}; int n= 28; int i; for(i=0;i<n;i++) { printf("%d\t",a[i]); } printf("\n"); void quick_sort(int *nums,int low,int high); quick_sort(a,0,n-1); for(i=0;i<n;i++) { printf("%d\t",a[i]); } printf("\n"); system("pause"); return 0; } int getPosition(int *nums,int low,int high) { int k,pos; k = nums[low]; while(low<high) { while(low<high && nums[high]>=k) high--; if(low<high) nums[low++] = nums[high]; while(low<high && nums[low]<=k) low++; if(low<high) nums[high--] = nums[low]; } nums[low] = k; pos = low; return pos; } void quick_sort(int *nums,int low,int high) { int pos; if(low<high) { pos = getPosition(nums,low,high); quick_sort(nums,low,pos-1); quick_sort(nums,pos+1,high); } }

转载请注明原文地址: https://www.6miu.com/read-83553.html

最新回复(0)