排序算法

快速排序

C语言快速排序qsort(数组,长度,元素大小,cmp函数(*,*))//注意函数cmp的参数为指针

#include <stdio.h>
#include <stdlib.h>
#include <stdlib.h> //qsort函数
int cmp (int a,int b)
{
return a -b;
} //0 3 2 1 4 5 6 9 8 7
int main()
{
inta[10],i,x;
for(i=0;i<10; i++)
{
scanf("%d",&a[i]);
}
qsort(a,10,sizeof(a[0]),cmp);
for(i=0;i<10; i++)
{
printf("%d ",a[i]);
}
return 0;
}
自定义qsort void qsort2(int a[],int l,int r){
if(l<r){
inti=l,j=r;
intk=a[i];
while(i<j){
while(i<j&&a[j]>=k){
j--;
}
a[i]=a[j];
while(i<j&&a[i]<=k){
i++;
}
a[j]=a[i];
}
a[i]=k;
qsort2(a,l,i-1);
qsort2(a,i+1,r);
}
}

冒泡排序

void bubble(int a[],int n)
{
int i,j;
for(i=0;i<n-1; i++)
{
for(j=n-1; j>i; j--)
{
if(a[j]<a[j-1])
{
int t=a[j];
a[j]=a[j-1];
a[j-1]=t;
}
}
}
}

归并排序

void merge(int a[],int l,int m,int r){
inttemp[r-l+1];
inti=l,j=m+1,k=0;
while(i<=m&&j<=r){
if(a[i]<a[j])temp[k++]=a[i++];
elsetemp[k++]=a[j++];
}
while(i<=m){
temp[k++]=a[i++];
}
while(j<=r){
temp[k++]=a[j++];
}
for(i=0;i<k;i++){
a[l+i]=temp[i];
}
} void mergeSort(int a[],int l,int r){
if(l<r){
intm=(l+r)/2;
mergeSort(a,l,m);
mergeSort(a,m+1,r);
merge(a,l,m,r);
}
}

选择排序

void selectSort(int a[],int n){
int i,j;
for(i=0;i<n;i++){
intk=i;
for(j=i+1;j<n;j++){
if(a[j]>a[k]){
k=j;
}
if(k!=i){
int t=a[i];
a[i]=a[k];
a[k]=t;
}
}
} }

堆排序

#include <stdio.h>
#include <stdlib.h> typedef struct heap_t{
int *arr; //point for an array to store heap value.
intheapMaxIndex; //heap element max indexnumber
intarrLength; //array length of arr }Heap; void printArr(int *p, int size)
{
int i;
for(i=0;i<size;i++)
{
printf("%d",p[i]);
}
} void maxHeapify(Heap *hp, unsigned int nodei)
{
unsignedint l = (nodei+1) << 1 - 1; //leftchild = 2i-1, -1 ?:arr[0..n-1]
unsignedint r = (nodei+1) << 1 ; //right child = 2i
unsignedint largest = 0;
intheapMaxI = hp->heapMaxIndex; if(l<= heapMaxI && hp->arr[l] > hp->arr[nodei])
largest= l ;
else
largest= nodei ; if(r<= heapMaxI && hp->arr[r] > hp->arr[largest])
largest= r ; if(largest!=nodei)
{
//exchange
inttmp ;
tmp= hp->arr[largest];
hp->arr[largest]= hp->arr[nodei];
hp->arr[nodei]= tmp; maxHeapify(hp,largest);
}else{
return;
} } Heap *createHeap(int *arrp, int arrLength,Heap *heap)
{
int i;
heap->arr =arrp;
heap->heapMaxIndex = arrLength-1;
heap->arrLength = arrLength; //for an heapa[0..n-1]; a[(n/2)..n-1] all are leaves
for(i =arrLength>>1-1; i >=0; i--)
maxHeapify(heap,i);
return heap;
} void heapSort(Heap *hp)
{
int tmp;
int last;
while(hp->heapMaxIndex>0)
{
last= hp->heapMaxIndex ;
//exchange
tmp= hp->arr[last];
hp->arr[last]= hp->arr[0];
hp->arr[0]= tmp;
hp->heapMaxIndex-= 1;
maxHeapify(hp,0); //make heap from root node 0 to heapMaxIndex
} } int main()
{
inta[]={15,25,32,23,1,-4,35,2,-85,42,0,12,26,56,45,12,145,17,25,21};
printArr(a,20);
printf("\n"); Heaphpa,*phpa;
phpa= createHeap(a,20,&hpa);
heapSort(phpa); printArr(a,20);
putchar('\n');
return 0;
}

C语言排序的更多相关文章

  1. 数据结构(C语言)—排序

    数据结构(C语言)—排序 排序 排序是按关键字的非递增或递减顺序对一组记录中心进行排序的操作.(将一组杂乱无章的数据按一定规律顺次排列起来.) 未定列表与不稳定列表 假设 Ki = Kj ( 1 ≤ ...

  2. C语言排序算法之简单交换法排序,直接选择排序,冒泡排序

    C语言排序算法之简单交换法排序,直接选择排序,冒泡排序,最近考试要用到,网上也有很多例子,我觉得还是自己写的看得懂一些. 简单交换法排序 /*简单交换法排序 根据序列中两个记录键值的比较结果来对换这两 ...

  3. C语言排序算法复习

    排序算法有很多种,这里在复习和分析的基础上,做一个自己的总结: 首先要知道有哪些排序算法,google一下,有云C语言7大经典排序算法(也有8大).主要包括冒泡排序,快速排序,选择排序,插入排序,希尔 ...

  4. 两种常用的C语言排序算法

    1. 要求输入10个整数,从大到小排序输出 输入:2 0 3 -4 8 9 5 1 7 6 输出:9 8 7 6 5 3 2 1 0 -4 解决方法:选择排序法 实现代码如下: #include &l ...

  5. C语言排序算法

    (1)“冒泡法” 冒泡法大家都较熟悉.其原理为从a[0]开始,依次将其和后面的元素比较,若a[0]>a[i],则交换它们,一直比较到a[n].同理对a[1],a[2],...a[n-1]处理,即 ...

  6. c语言排序算法总结

    一.希尔(Shell)排序法 /* Shell 排序法 */ #include <stdio.h> void sort(int v[],int n) {      int gap,i,j, ...

  7. C语言排序算法学习笔记——选择类排序

    选择排序:每一趟(例如第i趟)在后面n-i+1(i=1,2,3,……,n-1)个待排序元素中选取关键字最小的元素,作为有序子序列的第i个元素,直到n-1趟做完,待排序元素只剩下1个,就不用再选了. 简 ...

  8. C语言排序算法学习笔记——交换类排序

    交换类排序:根据序列中两个元素关键字的比较结果来交换他俩在序列中的位置. 冒泡排序:假设待排序表长为n,从后往前(或从前往后)两两比较相邻元素的值,若为逆序(即A[i-1]>A[i])则交换他们 ...

  9. C语言排序算法学习笔记——插入类排序

    排序就是讲原本无序的序列重新排序成有序的序列.序列里可以是一个单独数据,也可以是多个数据组合的记录,按照记录里的主关键字或者次关键字进行排序. 排序的稳定性:如果排序表中有两个元素R1,R2,其对应的 ...

随机推荐

  1. SQL Server 数据库表的管理

    上一篇文章简单梳理了一下SQL Server数据库的安装和基本操作,这篇文章主要讲述一下数据库表的管理 一.数据库的创建 有关数据库的创建有两种方式,一种是通过视图创建,第二种就是通过T-SQL语句来 ...

  2. 【性能】web提升性能的小总结

    1. 异步加载js文件,判断文件是否已加载,不重复加载 if (typeof echarts === 'undefined') { console.log('异步加载echarts'); $.getS ...

  3. 【nodejs之我的开源module】 使用express搭建web服务器,代码即文档的实现。

    前言 都说nodejs适合制作restful_API,因为它有异步处理能力,能吞吐更多的请求,这一点是大家都认可的.前不久我使用nodejs+express+postgresql搭建了一个restfu ...

  4. jvm系列 (二) ---垃圾收集器与内存分配策略

    垃圾收集器与内存分配策略 前言:本文基于<深入java虚拟机>再加上个人的理解以及其他相关资料,对内容进行整理浓缩总结.本文中的图来自网络,感谢图的作者.如果有不正确的地方,欢迎指出. 目 ...

  5. 18. leetcode 387. First Unique Character in a String

    Given a string, find the first non-repeating character in it and return it's index. If it doesn't ex ...

  6. Uva 10142 Australia Voting

    水题 模拟 大意就是模拟一个选举的系统 认真读题,注意细节,耐心调试 #include<cmath> #include<math.h> #include<ctype.h& ...

  7. UITextField成为第一响应者

    @interface CSRegisterTwoViewController ()<UITextFieldDelegate> @property (weak, nonatomic) IBO ...

  8. 多系统重装其中Win7后的启动引导列表恢复

    重装Win7后会导致原grub引导被覆盖,要修复grub需要一张Ubuntu的LiveCD(安装光盘),用LiveCD启动电脑,进入Try Ubuntu(试用Ubuntu),进入之后打开终端,做如下几 ...

  9. /etc/shadow,/etc/passwd,/etc/shadow,/etc/passwd文件的内容解释

    1.1 /etc/passwd文件内容格式           该目录存储的是操作系统用户信息,该文件为所有用户可见 用户名: 密码 : uid  : gid :用户描述:主目录:登陆shell 举个 ...

  10. SpringBoot启动流程解析

    写在前面: 由于该系统是底层系统,以微服务形式对外暴露dubbo服务,所以本流程中SpringBoot不基于jetty或者tomcat等容器启动方式发布服务,而是以执行程序方式启动来发布(参考下图ke ...