排序算法之快速排序

快速排序基本思想:挖坑填数+分治法

快速排序的分治partition过程有两种方法,一种是上面所述的两个指针索引一前一后逐步向后扫描的方法(算法导论上采用的是这种方法),还有一种方法是两个指针从首位向中间扫描的方法(大多数的人和一般的教材采用的是这第二种首尾向中间扫描法)。本文采用第二种方法。

1,把第一个作为基准,

2,先从后向前找,找到小于的,放在第一个

3,再从前向后找,找到大于的,放在刚刚移过的坑中,然后重复

 


#include<stdio.h> #include<time.h> #define Length 500 //函数声明 void QuickSort(long*,long,long); long Partition(long*,long,long); void Swap(long*,long*); int main() { long L[Length]; long i=0; printf("请分别输入%d个整数:\n",Length); for(i=0;i<Length;i++) { printf("\n请输入第%d个整数:",i+1); scanf("%d",&L[i]); } printf("\n排序前:"); for(i=0;i<Length;i++) { printf("%5d",L[i]); } QuickSort(L,0,Length-1); printf("\n排序后:"); for(i=0;i<Length;i++) { printf("%5d",L[i]); } printf("\n"); getchar(); getchar(); getchar(); return 0; } //算法实现 //快速排序算法是一种递归实现的算法,所以必然要使用额外在堆栈做为辅助空间,堆栈深度与N个结点的 二叉树相同,约为O(logn) //快速排序算法的时间复杂度为O(nlogn),在平均性能方面目前公认为最好的算法 void QuickSort(long*L,long low,long high) { long pivotloc; if(low<high) { pivotloc=Partition(L,low,high); QuickSort(L,low,pivotloc-1); QuickSort(L,pivotloc+1,high); } } long Partition(long*L,long low,long high) { long pivotkey=L[low]; //把第低位做为枢轴位置 while(low<high) { //当枢轴右边元素都比枢轴大时,高位左移,直接所 while(low<high&&L[high]>=pivotkey) high--; Swap(&L[low],&L[high]); while(low<high&&L[low]<=pivotkey) low++; Swap(&L[low],&L[high]); } return low; } //用于交换数据的函数 void Swap(long* a,long* b) { long temp; temp=*a; *a=*b; *b=temp; }

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值