转载于> http://blog.chinaunix.net/uid-26404477-id-3329885.html

总的关键字比较次数:O(nlgn)

尽管快速排序的最坏时间为O(n2),但就平均性能而言,它是基于关键字比较的内部排序算法中速度最快者,快速排序亦因此而得名。它的平均时间复杂度为O(nlgn)

#include <stdio.h>
#include <stdlib.h> void swap(int *x,int *y)
{
int temp;
temp = *x;
*x = *y;
*y = temp;
} int choose_pivot(int i,int j )
{
return((i+j) /2);
} void quicksort(int list[],int m,int n)
{
int key,i,j,k;
if( m < n)
{
k = choose_pivot(m,n);
swap(&list[m],&list[k]);
key = list[m];
i = m+1;
j = n;
while(i <= j)
{
while((i <= n) && (list[i] <= key))
i++;
while((j >= m) && (list[j] > key))
j--;
if( i < j)
swap(&list[i],&list[j]);
}
// 交换两个元素的位置
swap(&list[m],&list[j]);
// 递归地对较小的数据序列进行排序
quicksort(list,m,j-1);
quicksort(list,j+1,n);
}
} void printlist(int list[],int n)
{
int i;
for(i=0;i<n;i++)
printf("%d\t",list[i]);
} void main()
{
const int MAX_ELEMENTS = 10;
int list[MAX_ELEMENTS]; int i = 0; // 产生填充序列的随机数
for(i = 0; i < MAX_ELEMENTS; i++ ){
list[i] = rand();
}
printf("进行排序之前的序列:\n");
printlist(list,MAX_ELEMENTS); // sort the list using quicksort
quicksort(list,0,MAX_ELEMENTS-1); // print the result
printf("使用快速排序算法进行排序之后的序列:\n");
printlist(list,MAX_ELEMENTS);
}

最新文章

  1. javascript之小积累-匿名函数表达式的最佳实践
  2. WdatePicker组件不显示
  3. Win7打补丁以后vs2012突然出现的程序版本不兼容问题
  4. Web开发常用知识点 - PHP
  5. 【温故而知新-Javascript】时间效果(显示当前时间、显示当前日期、显示页面停留时间、倒计时)
  6. 实现输出h264直播流的rtmp服务器
  7. call和apply方法的理解
  8. 纯js实现html转pdf
  9. [翻译] C# 8.0 预览
  10. servlet文件上传2——复合表单提交(数据获取和文件上传)
  11. python学习第22天
  12. python __getattra__()
  13. Hadoop 单表关联
  14. jdk8中奖Date转换为String格式的方法
  15. JQuery的选择器的简单介绍
  16. 代码编辑器之notepad++
  17. QQ在开发中的应用
  18. 【SVN】自动定时更新
  19. html dom基本操作
  20. CC2540 OSAL 学习其中原理,以及 给任务 添加 一个事件(定时发送串口消息)

热门文章

  1. Mac下安装和配置Maven
  2. mac navicate破解版汉化
  3. windows中mysql5.7保存emoji表情
  4. 【框架】selenium运行失败后自动截图(三)
  5. MAVEN 创建项目
  6. 网卡驱动-BD详解(缓存描述符 Buffer Description)
  7. mysql不会使用索引,导致全表扫描情况
  8. 如何快速成为一名Linux运维工程师
  9. 二. Python基础(2)--语法
  10. [Leetcode 392]判断子序列 Is Subsequence