快排方法代码记录

xiaoxiao2021-02-28  70

#include <stdio.h> #include <stdlib.h> int nums[5]; int main() { int i,j; for(i=0;i<5;i++){ scanf("%d",&nums[i]); } sort(0,4); printf("\n"); for(i=0;i<5;i++){ printf("%d ",nums[i]); } return 0; } void sort(int low,int hight){ if(low >= hight) return; int target = nums[low]; //保存好头尾初始位置,下一次递归要用到 int i = low,j = hight; while(low < hight){ //开始从右边找比基准值小的数 while(target < nums[hight]){ hight --; } //找到后将低位的大数变成高位的小数 //这里一定要判断,不然low会多加一次 if(low < hight) nums[low++] = nums[hight]; //然后再从左边找比基准值大的 while(target > nums[low]) { low ++; } if(low < hight) nums[hight--] = nums[low]; } //最后再进行基准值的低位交换 nums[low] = target; //以low为分界线,左右两边的数继续排序 sort(i,low-1); sort(low+1,j); }

(低位高位指左右两边的游标) 方法总结:头为基准,高位从右找小数,找到将左低位数变为找到的高位小数,再从低位左边找大数,找到将右边高位数变为找到的低位大数,当两游标相遇时将低位数变为基准数,结束一次比较,再以低位数为中心分为左右两边,继续使用递归排序。

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

最新回复(0)