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