快排 快速排序 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, ...
随机推荐
- sql 计算周围公里语句
$lng2 = set_post('lng'); //当前位置坐标 $lat2 = set_post('lat'); round((*ATAN2(SQRT(SIN((`gps`.`gps_lat`-$ ...
- 国内经典BI系统架构分析
谈起商业智能BI,也许大家并不陌生,但你是否了解国内的各类BI系统架构? 自国内商业智能发展以来,就系统结构方面已经历了多次优化性的变革.目前国内商业智能BI系统的经典架构的模式包括数据层.业务层和应 ...
- js parseInt和map函数
今天看了一个js的题目["1","2","3"].map(parseInt),看到后脑海中浮现的答案是[1,2,3],但是看到正确答案后蒙了 ...
- 识别 Linux上的设备(磁盘)类型
1. Linux 上的设备 (device) Linux 操作系统中,各种设备驱动(device driver)通过设备控制器(device controller)来管理各种设备(device),其关 ...
- 【读书笔记《Bootstrap 实战》】2.作品展示站点
假设我们已经想好了要给自己的作品弄一个在线站点.一如既往,时间紧迫.我们需要快一点,但作品展示效果又必须专业.当然,站点还得是响应式的,能够在各种设备上正常浏览,因为这是我们向目标客户推销时的卖点.这 ...
- js数组中的常用方法总结
栈方法(后进先出) ArrayObj.push()方法 ArrayObj.pop()方法 ArrayObj.push():就是向数组末尾添加新的元素,返回的是数组新的长度.ArrayObj.pop() ...
- BZOJ 2330: [SCOI2011]糖果 [差分约束系统] 【学习笔记】
2330: [SCOI2011]糖果 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 5395 Solved: 1750[Submit][Status ...
- java Socket编程-基于TCP
package com.wzy.Test; import java.io.BufferedReader; import java.io.IOException; import java.io.Inpu ...
- SQL语句的使用
SELECT b.level, a.cnt FROM (SELECT `level`,COUNT(*) AS cnt FROM wlsjlog GROUP BY level) a LEFT JOIN ...
- IO(三)----序列流
SequenceInputStream 表示其他输入流的逻辑串联.它从输入流的有序集合开始,并从第一个输入流开始读取,直到到达文件末尾,接着从第二个输入流读取,依次类推,直到到达包含的最后一个输入流的 ...