qsort,mergesort,插入排序
//插入排序
int a[n];
for(int i=;i<=n;i++)
{
int s=a[i];
int j=i-;
while(j&&a[j]>a[i])
{
a[j+]=a[j];
j--;
}
a[j+]=s;
} int part(int a[],int low,int high)
{
int tmp=a[low];
while(low<high)
{
while(low<high&&a[high]>=tmp)
high--;
if(low<high)
{
a[low]=a[high];
low++;
}
while(low<high&&a[low]<=tmp)
low++;
if(low<high)
{
a[high]=a[low];
high--;
}
}
a[low]=tmp;
return low;
} void quick_sort(int a[],int low,int high)
{
int mid;
if(low<high)
{
mid=(low+high)/;
mid=part(a,low,high);
quick_sort(a,low,mid-);
quick_sort(a,mid+,high);
}
return ;
} /************归并************/
void merge(int a[],int low,int high)
{
int b1=low;
int mid=(low+high)/;
int b2=mid+;
int len=high-low+;
int *b,k=;
b=(int *)malloc(len*sizeof(int));
while(b1<=mid&&b2<=high)
{
if(a[b1]<=a[b2])
b[k++]=a[b1++];
else
b[k++]=a[b2++];
}
while(b1<=mid)
b[k++]=a[b1++];
while(b2<=high)
b[k++]=a[b2++];
for(int i=;i<len;i++)
a[low++]=b[i];
free(b);
} void merge_sort(int a[],int low,int high)
{
int mid=(low+high)/;
if(low<high)
{
merge_sort(a,low,mid);
merge_sort(a,mid+,high);
merge(a,low,high);
}
return ;
}
qsort,mergesort,插入排序的更多相关文章
- 七内部排序算法汇总(插入排序、Shell排序、冒泡排序、请选择类别、、高速分拣合并排序、堆排序)
写在前面: 排序是计算机程序设计中的一种重要操作,它的功能是将一个数据元素的随意序列,又一次排列成一个按keyword有序的序列.因此排序掌握各种排序算法很重要. 对以下介绍的各个排序,我们假定全部排 ...
- 一些数组排序算法的简单实现(冒泡、插入、希尔、归并和qsort)
#include <stdlib.h> #include <string.h> #include "sort.h" //冒泡排序 int bubbleSor ...
- 数据结构图文解析之:直接插入排序及其优化(二分插入排序)解析及C++实现
0. 数据结构图文解析系列 数据结构系列文章 数据结构图文解析之:数组.单链表.双链表介绍及C++模板实现 数据结构图文解析之:栈的简介及C++模板实现 数据结构图文解析之:队列详解与C++模板实现 ...
- MergeSort(归并排序)算法Java实现
归并排序 归并排序 (merge sort) 是一类与插入排序.交换排序.选择排序不同的另一种排序方法.归并的含义是将两个或两个以上的有序表合并成一个新的有序表.归并排序有多路归并排序.两路归并排序 ...
- 排序算法 2 qsort 库函数,泛型函数
_____谈谈排序算法 交换排序——>冒泡排序-->快速排序 选择排序——>简单选择排序——>堆排序 插入排序——>直接插入排序——>希尔排序 _____排序算法对 ...
- qsort
/*** *qsort.c - quicksort algorithm; qsort() library function for sorting arrays * Copyright (c) Mic ...
- 疯狂的Java算法——插入排序,归并排序以及并行归并排序
从古至今的难题 在IT届有一道百算不厌其烦的题,俗称排序.不管是你参加BAT等高端笔试,亦或是藏匿于街头小巷的草根笔试,都会经常见到这样一道百年难得一解的问题. 今天LZ有幸与各位分享一下算法届的草根 ...
- 八大排序方法汇总(选择排序,插入排序-简单插入排序、shell排序,交换排序-冒泡排序、快速排序、堆排序,归并排序,计数排序)
2013-08-22 14:55:33 八大排序方法汇总(选择排序-简单选择排序.堆排序,插入排序-简单插入排序.shell排序,交换排序-冒泡排序.快速排序,归并排序,计数排序). 插入排序还可以和 ...
- 普林斯顿大学算法课 Algorithm Part I Week 3 归并排序 Mergesort
起源:冯·诺依曼最早在EDVAC上实现 基本思想: 将数组一分为(Divide array into two halves) 对每部分进行递归式地排序(Recursively sort each ha ...
随机推荐
- bzoj 1061 [Noi2008]志愿者招募(数学模型,MCMF)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1061 [题意] 雇人满足每天至少需要的人数. [思路一] Byvoid的题解 clic ...
- Emmet:HTML/CSS代码快速编写神器(转)
Emmet的前身是大名鼎鼎的Zen coding,如果你从事Web前端开发的话,对该插件一定不会陌生.它使用仿CSS选择器的语法来生成代码,大大提高了HTML/CSS代码编写的速度,比如下面的演示: ...
- MFC使用ShowWindow(SW_MAXIMIZE)任务栏消失的处理
ShowWindow(SW_SHOWMAXIMIZED);//窗口最大化 问题:在写程序时,如果包含了标题栏,但是没有包含最大化按钮或者最小话按钮. 那么人工用ShowWindow(SW_MAXIMI ...
- 内核源码分析之linux内核栈(基于3.16-rc4)
在3.16-rc4内核源码中,内核给每个进程分配的内核栈大小为8KB.这个内核栈被称为异常栈,在进程的内核空间运行时或者执行异常处理程序时,使用的都是异常栈,看下异常栈的代码(include/linu ...
- GraphChi介绍
GraphChi介绍 最近在研究graphchi,它是一个在单机上处理图的一个很强大的框架. 给大家一些链接可以学习它: 论文:http://select.cs.cmu.edu/publication ...
- Oracle的回收站和闪回查询机制(二)
上一篇中讲诉了Oracle中一些闪回查询(Flashback Query),这是利用回滚段信息来恢复一个或一些表到以前的一个时间点(一个快照).要注意的是,Flashback Query仅仅是查询以前 ...
- HDU 5531 Rebuild (2015长春现场赛,计算几何+三分法)
Rebuild Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Total S ...
- jquery easyui防止超出浏览器边界
var easyuiPanelOnMove=function(left,top){ if(left<0){ $(this).window('move',{ left:1 }); } if(top ...
- codeforces 624A Save Luke(水题)
A. Save Luke time limit per test 1 second memory limit per test 256 megabytes input standard input o ...
- UVaLive 7360 Run Step (排列组合,枚举)
题意:给定一个数 n ,表示一共有 n 步,然后你可以迈一步也可以迈两步,但是左腿和右腿的一步和两步数要一样,并且两步数不小于一步数,问你有多少种方式. 析:虽然是排列组合,但还是不会做.....水啊 ...