快速排序 - 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的快速 ...
随机推荐
- win7删除一些顽固的文件夹
创建一个记事本,键入以下命令: DEL /F /A /Q \\?\%1 RD /S /Q \\?\%1 然后保存为bat文件,然后将要删除的文件或文件夹拖入bat的文件图标上,既可以强力删除一些无法删 ...
- 使用用Generic.xaml加载默认的主题资源
把Resource嵌入到Generic.xaml文件中,并把该文件放到应用程序的Themes主题文件夹下面,这们Generic.xaml文件中的资源就可以被系统识别为默认主题一部分,从而进行使用. 为 ...
- C++ 内存的分配方式 (摘选自网络)
在c++中有三种分配内存的方式: 在许多大大公司在面试的时候很可能考到的内容.在这里和大家分享了!1. 静态存储区,是在程序编译时就已经分配好的,在整个运行期间都存在,如全局变量.常量.2. 栈上分配 ...
- python3.5------day3-数据结构(dict,file)
字典(dict) 字典的定义: 字典的形式是以key:values.{key1,values,key2,values} 特性: 1.可以存放多个值 2.字典是无需的 3.字典的key是唯一,有去重功能 ...
- Delphi2010 DataSnap入门
DataSnap到了Delphi2010有了很大的变化,已经可以完全抛弃DCOM之类的东西了,在以前版本中建立一个DataSnap,需要使用DCOMConnection或者SockConnection ...
- Javascript--装饰器模式和观察者模式
装饰器模式 (function(){//装饰一棵树,装饰器模式通过对对象的属性进行改变来装饰对象.需要一个设置属性的方法 var tree={}; tree.decorate=function(){ ...
- shell编程学习
1.项目中用到Linux的crontrab Linux下的定时执行主要是使用crontab文件中加入定制计划来执行,但是也不是非常复杂,基本上用过一遍就能记住了,关键是要记住/var/spool/cr ...
- web前端安全 XSS跨站脚本 CSRF跨站请求伪造 SQL注入
web安全,从前端做起,总结下web前端安全的几种技术: 1,XSS XSS的全称是Cross Site Scripting,意思是跨站脚本,XSS的原理也就是往HTML中注入脚本,HTML指定了脚本 ...
- [测]jieba分词
import jieba import os import jieba.analyse with open('src.txt', 'r') as file: data = file.read() se ...
- textarea之placeholder
placeholder 属性适用于以下的 <input> 类型:text, search, url, telephone, email 以及 password.这个属性是html5才有的新 ...