冒泡排序

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

选择排序

void selectSort(int a[],int n){int i,j,temp,index;for(i=0;i<n-1;i++){index=i;for(j=i+1;j<n;j++){if(a[j]<a[index]){index=j;}}temp=a[i];a[i]=a[index];a[index]=temp;}
}

插入排序

void insertSort(int a[],int n){int i,j,cur,temp;for(i=1;i<n;i++){cur=a[i];for(j=i-1;j>=0&&cur<a[j];j--){a[j+1]=a[j];}a[j+1]=cur;}
}

希尔排序

void shellSort(int a[],int n){int i,j,gap,temp;for(gap=n/2;gap>0;gap/=2){for(i=gap;i<n;i++){for(j=i;j-gap>=0&&a[j]<a[j-gap];j-=gap){temp=a[j];a[j]=a[j-gap];a[j-gap]=temp;}}}
}

归并排序

实际上归并排序过程和希尔排序差不多,编写起来却要麻烦不少。

void merge(int a[],int left,int mid,int right){int *temp=(int*)malloc(sizeof(int)*(right-left+1));int i=left,j=mid+1,index=0;//合并 while(i<=mid&&j<=right){if(a[i]<a[j])temp[index++]=a[i++];else temp[index++]=a[j++];}while(i<=mid)temp[index++]=a[i++];while(j<=right)temp[index++]=a[j++];for(i=left;i<=right;i++)a[i]=temp[i-left];
}void mergeSort(int a[],int left,int right){int i,j;if(left<right){int mid=(left+right)/2;mergeSort(a,left,mid);mergeSort(a,mid+1,right);merge(a,left,mid,right);}
}

快速排序

void quickSort(int a[],int left,int right){int i=left,j=right,temp,t=a[left];if(right>left)return;while(i!=j){while(a[j]>t&&i<j)j--;while(a[i]<=t&&i<j)i++;if(i<j){temp=a[i];a[i]=a[j];a[j]=temp;}}a[left]=a[i];a[i]=t;quickSort(a,left,i-1);quickSort(a,i+1,right);
}

堆排序

void heapAdjust(int a[],int n,int pIndex){int index,lIndex=2*pIndex+1,rIndex=2*pIndex+2,temp;if(lIndex>=n)return;if(rIndex>=n)index=lIndex;else index=a[lIndex]>a[rIndex]?lIndex:rIndex;if(a[pIndex]<a[index]){temp=a[index];a[index]=a[pIndex];a[pIndex]=temp;heapAdjust(a,n,index);}}void heapSort(int a[],int n){int i,temp;for(i=(n-1)/2;i>0;i--)heapAdjust(a,n,i);for(i=n-1;i>0;i--){if(a[i]<a[0]){temp=a[i];a[i]=a[0];a[0]=temp;}heapAdjust(a,i,0);}
}

计数排序

void countingSort(int a[],int n){int i,j,k=0,max=a[0],*temp;for(i=0;i<n;i++){if(a[i]>max)max=a[i];}temp=(int*)malloc(sizeof(int)*(max+1));memset(temp,0,sizeof(int)*(max+1));for(i=0;i<n;i++)temp[a[i]]++;for(i=0;i<=max;i++){for(j=temp[i];j>0;j--)a[k++]=i;}
}

桶排序

桶数量为max+1时,算法同计数排序

void bucketSort(int a[],int n){int i,j,k,temp,bucketNum=10,min=a[0],max=a[0],count[10],**buckets;for(i=0;i<n;i++){if(a[i]<min)min=a[i];if(a[i]>max)max=a[i];}buckets=(int**)malloc(sizeof(int*)*bucketNum);for(i=0;i<bucketNum;i++){buckets[i]=(int*)malloc(sizeof(int)*n);memset(buckets[i],0,sizeof(int)*n);count[i]=0;}//进桶 for(i=0;i<n;i++){temp=(bucketNum-1)*(a[i]-min)/(max-min);buckets[temp][count[temp]++]=a[i];}//排序 for(i=0;i<bucketNum;i++){for(j=0;j<count[i]-1;j++){for(k=j+1;k<count[i];k++)if(buckets[i][k]<buckets[i][j]){temp=buckets[i][j];buckets[i][j]=buckets[i][k];buckets[i][k]=temp;}}}k=0;for(i=0;i<bucketNum;i++)for(j=0;j<count[i];j++)a[k++]=buckets[i][j];
}

基数排序

void radixSort(int a[], int n){int i,j,k,r,dev,mod,max=a[0],temp[10][n],count[10];for(i=0;i<n;i++)if(a[i]>max)max=a[i];for(dev=1,mod=10;mod<max*10;dev*=10,mod*=10){for(i=0;i<10;i++){count[i]=0;for(j=0;j<n;j++)temp[i][j]=0;}for(i=0;i<n;i++){r=(a[i]%mod)/dev;temp[r][count[r]++]=a[i];}k=0;for(i=0;i<10;i++)for(j=0;j<count[i];j++)a[k++]=temp[i][j];}
}

C语言实现十大经典排序算法相关推荐

  1. 11月14日云栖精选夜读 | 动画+原理+代码,解读十大经典排序算法

    排序算法是<数据结构与算法>中最基本的算法之一. 排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过 ...

  2. 十大经典排序算法解析及优化

    前言 在上篇文章<十大经典排序算法(动图演示)>中,已经能够了解各种排序算法的思想逻辑,虽然其中提供了代码,但对其解析却并不够全面,而且使用的是js来进行编写演示.本人根据其上代码转换为P ...

  3. 十大经典排序算法动画与解析,看我就够了

    作者 | 程序员小吴 转载自五分钟学算法(ID: CXYxiaowu) 排序算法是<数据结构与算法>中最基本的算法之一. 排序算法可以分为内部排序和外部排序.内部排序是数据记录在内存中进行 ...

  4. 十大经典排序算法(建议收藏)

    来自:Damonare的个人博客 原文:http://blog.damonare.cn/2016/12/20/十大经典排序算法总结(javascript描述)/ 0.算法概述  0.1 算法分类 十种 ...

  5. Algorithm:【Algorithm算法进阶之路】之十大经典排序算法

    Algorithm:[Algorithm算法进阶之路]之十大经典排序算法 相关文章 Algorithm:[Algorithm算法进阶之路]之数据结构二十多种算法演示 Algorithm:[Algori ...

  6. python经典排序_python实现十大经典排序算法

    写在前面 本文参考十大经典排序算法(动图演示),这篇文章有动图显示,介绍的很详细.本文是部分内容有借鉴此博客,用python实现,有一些改进. 各种算法的时间.空间复杂度 1.冒泡排序 1.比较相邻的 ...

  7. 十大经典排序算法总结(够兄弟们喝一壶的)

    Ⅰ.十大经典排序算法之插入排序及其二分优化:https://blog.csdn.net/Kevinnsm/article/details/114403557 Ⅱ.十大经典排序算法之冒泡排序及其优化:h ...

  8. 教小学妹学算法:十大经典排序算法深度解析

    最近有一位小学妹 Coco 入坑了算法,结果上来就被几个排序算法给整懵逼了,各种排序眼花缭乱,也分不清什么时候该用什么排序了. 今天呢,就在这分享一下我给小学妹讲十大经典排序算法的过程. 好吧,那我们 ...

  9. 【完整可运行源码+GIF动画演示】十大经典排序算法系列——冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序、堆排序、计数排序、桶排序、基数排序

    以前也零零碎碎发过一些排序算法,但总是不系统, 这次彻底的对排序系列做了一个整体的规划, 小伙伴们快快mark哦~ [GIF动画+完整可运行源代码]C++实现 冒泡排序--十大经典排序算法之一 [GI ...

最新文章

  1. TensorFlow创建DeepDream网络
  2. 非技术成本继续困扰光伏产业
  3. 第十六届全国大学生智能车竞赛山东赛区成绩汇总
  4. HashMap集合和TreeMap集合
  5. 闪退的解决方法_王者荣耀2.0不闪退需要什么手机?王者荣耀2.0闪退解决方法
  6. 看着手机会让您晕眩吗? 禁用动画
  7. jquery 操作css 选择器
  8. 阿里云使用笔记-Lrzsz上传下载文件-centos7
  9. Golang Json文件解析为结构体工具-json2go
  10. WordPress仿站实战教程
  11. 【asp.net core 系列】6 实战之 一个项目的完整结构
  12. java web景点规划导航
  13. 去掉百度地图API左下角的百度LOGO方法
  14. python求特征值以及特征向量,并且输出最小特征值对应的特征向量
  15. 作为产品经理的你,画原型图时崩溃过吗?
  16. 基于Java的个人日记本项目(附 源码 课件)
  17. Teen Readers【青少年读者】
  18. ARFoundation之路-光照估计
  19. Python 绘制柱状图和双柱状图
  20. DiskLruCache源码解析

热门文章

  1. android DrawerLayout 改变系统默认的灰色
  2. cocos 射线检测 3D物体 (Sprite3D点击)
  3. 两下或多下回车造成数据库多次提交事物的解决方法
  4. Unix/Linux/Mac os下 文件互传
  5. 机器学习入门(21)— 感受野概念
  6. ---pacman dpkg yum 之比较
  7. jquery图片播放切换插件
  8. 一些权限管理方面的文章
  9. linux加微软的数据库,在Linux上使用Microsoft SQL – 安装SQL
  10. 基于熵权法优劣解距离法_基于优劣解距离法的火电机组单辅机运行状态评估