快排 快速排序 qsort quicksort C语言
现在网上搜到的快排和我以前打的不太一样,感觉有点复杂,我用的快排是FreePascal里/demo/text/qsort.pp的风格,感觉特别简洁。
#include<stdio.h>
#define MAXN 10000
int a[MAXN];
int n;
void Mysort(int l, int r) {
int x,y,mid,t;
mid = a[(l+r)/];
x=l;
y=r;
do {
while(a[x]<mid)x++;
while(a[y]>mid)y--;
if(x<=y) {
t=a[x];
a[x]=a[y];
a[y]=t;
x++;
y--;
}
} while(x<=y);
if(l<y)Mysort(l,y);
if(x<r)Mysort(x,r);
}
int main() {
int i;
scanf("%d",&n);
for(i=; i<n; i++) {
scanf("%d",&a[i]);
}
Mysort(,n-);
for(i=; i<n; i++)printf("%d ",a[i]);
return ;
}
(其中(x+y)/2可以写成(x+y)>>1提升速度
(最近要实习生面试了,复习一下基础算法。之前排序基本都用STL的sort了,快排都快忘了,没想到我还是一遍就打出来了蛤铪哈)
更新一下:
算导快排:
int mypartition(int a[], int lo, int hi){
int pivot = a[hi];
int i = lo;
for(int j=lo; j<hi; j++){
if(a[j]<=pivot){
swap(a[i],a[j]);
i++;
}
}
swap(a[i],a[hi]);
return i;
}
void mysort(int a[], int lo, int hi){
if(lo>=hi)return;
int i = mypartition(a, lo, hi);
mysort(a, lo, i-);
mysort(a, i+, hi);
}
另一种快排,和最上面那个差不多,据说算导的swap次数太多,效率不如这种。这个是hdu1425代码
#include<cstdio>
#include<algorithm>
using namespace std; int a[]; int mypartition(int a[], int lo, int hi) {
int p = a[lo];
int i=lo-;
int j=hi+;
while(true) {
do {
i++;
} while(a[i]<p);
do {
j--;
} while(a[j]>p);
if(i>=j)return j;
swap(a[i],a[j]);
}
} void mysort(int a[], int lo, int hi) {
if(lo>=hi)return;
int i = mypartition(a, lo, hi);
mysort(a, lo, i);
mysort(a, i+, hi);
} int main() {
int n,m;
while(scanf("%d%d",&n,&m)!=EOF) {
for(int i=; i<n; i++) scanf("%d",&a[i]);
mysort(a,,n-);
if(m>)printf("%d",a[n-]);
for(int i=; i<m; i++) {
printf(" %d",a[n--i]);
}
puts("");
}
return ;
}
快排 快速排序 qsort quicksort C语言的更多相关文章
- 快排 - 快速排序算法 (Chinar出品 简单易懂)
Quicksort 快排的简单讲解 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- ...
- 数组第K小数问题 及其对于 快排和堆排 的相关优化比较
题目描述 给定一个整数数组a[0,...,n-1],求数组中第k小数 输入描述 首先输入数组长度n和k,其中1<=n<=5000, 1<=k<=n 然后输出n个整形元素,每个数 ...
- php中实现快排与冒泡排序
快排 <?php function quicksort($str){ if(count($str)<=1) return $str;//如果个数不大于一,直接返回 $key=$str[0] ...
- c语言中使用自带的qsort(结构体排序)+ 快排
c中没有自带的sort函数emm 不过有自带的qsort函数 (其实用法都差不多(只是我经常以为c中有sort 头文件要用 #include <stdlib.h> 一定要重新把指针指向的值 ...
- 数据结构65:快速排序算法(QSort,快排)
上节介绍了如何使用起泡排序的思想对无序表中的记录按照一定的规则进行排序,本节再介绍一种排序算法——快速排序算法(Quick Sort). C语言中自带函数库中就有快速排序——qsort函数 ,包含在 ...
- 【C语言编程入门笔记】排序算法之快速排序,一文轻松掌握快排!
排序算法一直是c语言重点,各个算法适应不用的环境,同时,在面试时,排序算法也是经常被问到的.今天我们介绍下快速排序,简称就是快排. 1.快速排序思想: 快排使用 分治法 (Divide and con ...
- qsort 快排函数(C语言)
qsort 快排函数(C语言) 函数原型 void qsort(void *base, size_t nitems, size_t size, int (*compar)(const void *, ...
- C语言快排
C语言使用快排的方式有两种,1.直接用库函数stdlib.h里的qsort函数 2.自己编写快排代码(第一种方便,第二种较为自由) qsort 的函数原型是:void qsort(void*base, ...
- poj1007 qsort快排
这道题比较简单,但通过这个题我学会了使用c++内置的qsort函数用法,收获还是很大的! 首先简要介绍一下qsort函数. 1.它是快速排序,所以就是不稳定的.(不稳定意思就是张三.李四成绩都是90, ...
随机推荐
- linux 文件系统结构及命令
1.linux 文件系统结构 / 根目录 root |--mnt/ | |--sdcard/ 挂载点 | |--usb0 | |--cdrom |--home | |--soft01 <- 用 ...
- [django]Django站点admin支持中文显示和输入设置
正文: Django站点admin支持中文输入设置,操作如下: 1 需要确定的你的数据库的client客户端和服务端的编码设置为utf-8,如果不是,请将其设置成utf-8编码,我采用mysql,详情 ...
- Whatbeg's blog 文章列表
whatbeg.com 文章列表 ----------------------------------------------------------------------------------- ...
- 抓鼠标的猫(Win32实现,Codeblocks+GCC编译)
程序效果: 猫的眼睛一直跟着鼠标移动: 鼠标经过猫的右脚附近时,猫会抓住鼠标.(未使用Hook) 代码: //main.cpp 1 #include <windows.h> #includ ...
- 杂项之pymysql连接池
杂项之pymysql连接池 本节内容 本文的诞生 连接池及单例模式 多线程提升 协程提升 后记 1.本文的诞生 由于前几天接触了pymysql,在测试数据过程中,使用普通的pymysql插入100W条 ...
- Andorid 反编译App
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/23564065 开发的过程中,有时候可能会去使用别的app里面的图片,参考布局甚至 ...
- 不封装ajax 带url参数调用接口
html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF- ...
- ThinkPHP跨控制器调用方法
跨控制器调用方法 1. 先造对象,再调用里面的方法 $sc=new \Home\Controller\IndexController(); 用绝对路径找echo $sc->ShuChu(); ...
- File API 读取文件小结
简单地说,File API只规定怎样从硬盘上提取文件,然后交给在网页中运行的JavaScript代码. 与以往文件上传不一样,File API不是为了向服务器提交文件设计的. 关于File API不能 ...
- gradle项目与maven项目相互转化
gradle这几年发展迅猛,github越来越多的项目都开始采用gradle来构建了,但是并不是所有人都对gradle很熟悉,下面的方法可以把gradle转成maven项目,前提gradle项目目录结 ...