小白仿写快排
来源:互联网 发布:mysql中文参考手册 编辑:程序博客网 时间:2024/06/11 15:49
本博代码为仿写一位长辈的博客代码,但忘了博名,如果有问题请联系我删除
快速排序是对冒泡排序的一种改进,使用的是分治法,主要思想为在待排序数组中找到一个关键数据(本例中为数组第一个数),设置两个参数 i和 j ,让i从头遍历 , j从尾遍历,分别找比关键数据大的数和比关键数据小的数,找到之后让i和j所指向的数交换,当i和j相等时,让i和j指向的数和关键数据交换,使得关键数据左边都比它小右边都比它大,在对左右两边再进行递归操作,是最终数组成为顺序。
#include<stdio.h>#define N 50int Arr[N];Quick_Sort(int left,int right){ if(left>right) return 0; int i,j,t,temp; temp=Arr[left]; i=left; j=right; while(i!=j) { while(i<j&&Arr[j]>=temp)// 找较大位置 { j--; } while(i<j&&Arr[i]<=temp) // 找较小位置 (注意等号,上面等号可不加,下面必须加) { i++; } if(i<j) // 交换 { t=Arr[i]; Arr[i]=Arr[j]; Arr[j]=t; } } // 填中间值 Arr[left]=Arr[i]; Arr[i]=temp; Quick_Sort(left,i-1); // 递归左边 Quick_Sort(i+1,right); // 递归右边 }int main(){ int n; int i; scanf("%d",&n); for(i=1;i<=n;i++) scanf("%d",&Arr[i]); Quick_Sort(1,n); for(i=1;i<=n;i++) printf("%d ",Arr[i]); return 0; }
0 0