快速排序 - C语言
看了这本《数据结构与算法分析》中的快速排序。
写下自己理解后的代码,以备后用。
#include "stdio.h" void insertSort(int arr[], int N)
{
int j, tmp, P;
for(P=; P< N; P++)
{
tmp = arr[P];
for(j=P; j> && arr[j-] > tmp; j-- )
arr[j] = arr[j-];
arr[j] = tmp;
}
} void swap(int *first, int *second)
{
int tmp = *first;
*first = *second;
*second = tmp;
} void printArr(int arr[], int N)
{
int i;
for( i = ; i < N; i++)
{
printf("%d\t", arr[i]);
}
printf("\n");
} int median3(int arr[], int left, int right)
{
int mid = (left + right)/;
if(arr[left] > arr[mid])
swap(&arr[left], &arr[mid]);
if(arr[left] > arr[right])
swap(&arr[left], &arr[right]);
if(arr[mid] > arr[right])
swap(&arr[mid], &arr[right]); swap(&arr[mid], &arr[right-]);
return arr[right -];
} void quickSort(int arr[], int left, int right)
{
int coutoff = ;
if(left + coutoff < right)
{
int pivort = median3(arr, left, right);
int i = left, j = right - ;
for(;;)
{
while(arr[++i] < pivort) {}
while(arr[--j] > pivort) {}
if(i < j)
swap(&arr[i], &arr[j]);
else
break;
}
swap(&arr[i], &arr[right -]);
quickSort(arr, left, i - );
quickSort(arr, i + , right);
}
else
{
insertSort(arr + left, right -left + );
}
} int main()
{
int test[] = {, , , , , , , , , };
printArr(test, );
quickSort(test, , );
// insertSort(test, 10)
printArr(test, );
return ;
}
快速排序 - C语言的更多相关文章
- 快速排序_C语言_数组
快速排序_C语言_数组 #include <stdio.h> void quickSort(int *, int, int); int searchPos(int *, int, int) ...
- [数据结构] 快速排序C语言程序
//由大到小//快速排序(待排序数组,左侧起点,右侧起点) void quickSort(int *array, int l, int r) { if ( l >= r) return; int ...
- 快速排序 C语言实现
转载于> http://blog.chinaunix.net/uid-26404477-id-3329885.html 总的关键字比较次数:O(nlgn) 尽管快速排序的最坏时间为O(n2),但 ...
- 快速排序c语言实现
#include <stdio.h> void quick_sort(int* a, int n) { ) return; int i,j,tmp,k; k = a[n/]; ,j = n ...
- P1177【模板】快速排序(JAVA语言)
import java.util.Scanner; import java.util.ArrayList; import java.util.Collections; import java.util ...
- 快速排序C语言版图文详解
算法原理:选一个数位基准,将序列分成两个部分,一边全是比它小序列,另一边全是比它大序列.然后再分别对比他小的序列和比再次进行基准分割.依次分割下去,得到一个有序的队列. 原理图示: 编辑 编辑 ...
- C语言排序
排序算法 快速排序 C语言快速排序qsort(数组,长度,元素大小,cmp函数(*,*))//注意函数cmp的参数为指针 #include <stdio.h> #include <s ...
- PHP-----数组和常见排序算法
数组的创建 <?php //php创建数组 //第一种方法 $arr[0]=1; $arr[1]=23; $arr[2]=20; $arr[3]=43; for($i=0;$i<count ...
- Neo4j 3.5发布,在索引方面大幅增强
Neo4j 3.5版本已正式发布,这也是Neo4j宣布企业版闭源以来发布的第一个版本. 这个版本在性能.资源使用率以及安全方面均有增强,我们可以先快速浏览一下这个版本: 全文索引 基于Index的快速 ...
随机推荐
- Postgresql-xl 调研
Postgresql-xl 调研 来历 这个项目的背后是一家叫做stormDB的公司.整个代买基于postgres-xc.开源版本应该是stormdb的一个分支. In 2010, NTT's Ope ...
- Spring概念
1.控制反转IOC:即生成对象,相当于new的功能,用IOC有利于维护. 2.依赖注入DI:即给属性赋值,相当于JavaBean的setter方法. 3.面向切面方程AOP:使得各个切面和目标类完全松 ...
- 在Ubuntu上安装Mysql For Python
安装: 首先安装pip,并且把pip更新到最小版本 apt-get install python-pip pip install -U pip 安装mysql开发包 apt-get install p ...
- AJAX实现跨域的三种种方法(代理,JSONP,XHR2)
由于在工作中需要使用AJAX请求其他域名下的请求,但是会出现拒绝访问的情况,这是因为基于安全的考虑,AJAX只能访问本地的资源,而不能跨域访问. 比如说你的网站域名是aaa.com,想要通过AJAX请 ...
- How-to: Enable User Authentication and Authorization in Apache HBase
With the default Apache HBase configuration, everyone is allowed to read from and write to all table ...
- nodejs安装心得
首先下载nodejs,http://nodejs.org/download/ 配置系统环境变量 管理员运行cmd, 输入命令 node -v 查看版本 安装npm Npm安装命令 npm-1.3.15 ...
- convert return char from sql server 2008 r2 or below version to c#
C# string.Replace((char)13, ' ') //newline char; string.Replace((char)10, ' ') //return char;
- [整理]FPGA学习资料汇总
01.特权同学倾情奉献海量FPGA学习资料 http://pan.baidu.com/s/1pJIb32F
- Gvim插件管理Vundle
之前关于gvim的博客中提到的很多插件安装比较繁琐,这一篇来介绍一下gvim管理插件的插件--vundle的安装以及使用,让givm的插件安装更加的简单 首先给出vundle的git地址 https: ...
- html5 绘制图片 drawImage
要在绘图上下文中绘制图片,可以使用 drawImage 方法.该方法有三种不同的参数: drawImage(image,dx,dy) drawImage(image,dx,dy,dw,dh) d ...