计算机算法之快速排序、原址排序、递归的最好应用
2013-12-05 22:04
239 查看
快速排序是实际应用中常常会用到的一种排序算法:因为它的平均性能非常好:速度也非常快,能够进行原址排序、甚至在虚存环境下也能很好地工作。下面给出一个快速排序在C语言下的实例:
#include "stdio.h" #include "conio.h" #define N 24 /* 快速排序算法:时间复杂度是nlg(n),以2为底,不是10! 是实际排序应用中最好的选择,因为它的平均性能非常好 它能够进行原址排序,甚至在虚存环境下也能很好地工作! 注意待排序数组的0号元素并不能用于排序,有特殊作用! */ void quickly_sort(int A[],int p,int r) { int q=0; if(p<r){ q=partition(A,p,r); quickly_sort(A,p,q-1); quickly_sort(A,q+1,r); } } /*快速排序算法关键的函数如下:它主要实现确定一个数: 这个数的左边的数永远不大于它,而在它右边的数永远不 小于它。 下面的p和r分别表示数组A的下标,p和r构成了 一个区间,在这个区间选择出一个符合要求的数*/ int partition(int A[],int p,int r) { int mid=A[r]; /*假设这个数就是中间数*/ int i=p-1; int j=0,temp=1; for(j=p;j<r;j++) { if(A[j]<mid) { i=i+1; temp=A[j]; A[j]=A[i]; A[i]=temp; } }i++; temp=A[r]; A[r]=A[i]; A[i]=temp; return i; } main() { int a ={0,2,5,4,3,0,2,8,1,6,7,54,67,4,34,32,12,14,38,21,24,25,78,20},i; /*0号元素没有参加排序,但必须有*/ quickly_sort(a,1,N-1); printf("利用快速算法排序好的数组如下\n"); for(i=1;i<N;i++) /*0号元素是自行添加,不需要输出*/ printf(" %d ",a[i]); getch(); }
相关文章推荐
- [算法入门]快速排序非递归方法(Java实现),大家一起来找茬啊~
- 快速排序的递归实现算法
- 笔试算法题(56):快速排序实现之非递归实现,最小k值选择(non-recursive version, Minimal Kth Selection of Quick Sort)
- 每天刷个算法题20160525:快速排序的递归转非递归解法
- 算法竞赛入门经典:第八章 高效算法设计 8.4快速排序应用之第k小的数
- Erlang的算法-(一)递归快速排序和MapReduce分布式的快排
- 快速排序经典算法(分治法,挖坑法,前后指针法,非递归)
- 快速排序的递归实现算法。
- (转)白话经典算法系列之六 快速排序 快速搞定
- 算法--快速排序
- 【数据结构与算法】【排序】快速排序的代码实现
- 快速排序lua实现 递归和栈两种实现
- 算法设计与分析 合并排序的递归实现算法
- 10种算法原理(冒泡排序,选择排序,快速排序,堆排序,希尔排序,桶排序等)
- 基础算法之快速排序
- 每天一种算法--快速排序
- 算法--排序(冒泡,选择,插入,快速)
- 快速排序的递归和非递归解法
- 算法之递归(4)- 应用
- 快速排序 -- 算法小结