C语言实现十大经典排序算法
冒泡排序
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语言实现十大经典排序算法相关推荐
- 11月14日云栖精选夜读 | 动画+原理+代码,解读十大经典排序算法
排序算法是<数据结构与算法>中最基本的算法之一. 排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过 ...
- 十大经典排序算法解析及优化
前言 在上篇文章<十大经典排序算法(动图演示)>中,已经能够了解各种排序算法的思想逻辑,虽然其中提供了代码,但对其解析却并不够全面,而且使用的是js来进行编写演示.本人根据其上代码转换为P ...
- 十大经典排序算法动画与解析,看我就够了
作者 | 程序员小吴 转载自五分钟学算法(ID: CXYxiaowu) 排序算法是<数据结构与算法>中最基本的算法之一. 排序算法可以分为内部排序和外部排序.内部排序是数据记录在内存中进行 ...
- 十大经典排序算法(建议收藏)
来自:Damonare的个人博客 原文:http://blog.damonare.cn/2016/12/20/十大经典排序算法总结(javascript描述)/ 0.算法概述 0.1 算法分类 十种 ...
- Algorithm:【Algorithm算法进阶之路】之十大经典排序算法
Algorithm:[Algorithm算法进阶之路]之十大经典排序算法 相关文章 Algorithm:[Algorithm算法进阶之路]之数据结构二十多种算法演示 Algorithm:[Algori ...
- python经典排序_python实现十大经典排序算法
写在前面 本文参考十大经典排序算法(动图演示),这篇文章有动图显示,介绍的很详细.本文是部分内容有借鉴此博客,用python实现,有一些改进. 各种算法的时间.空间复杂度 1.冒泡排序 1.比较相邻的 ...
- 十大经典排序算法总结(够兄弟们喝一壶的)
Ⅰ.十大经典排序算法之插入排序及其二分优化:https://blog.csdn.net/Kevinnsm/article/details/114403557 Ⅱ.十大经典排序算法之冒泡排序及其优化:h ...
- 教小学妹学算法:十大经典排序算法深度解析
最近有一位小学妹 Coco 入坑了算法,结果上来就被几个排序算法给整懵逼了,各种排序眼花缭乱,也分不清什么时候该用什么排序了. 今天呢,就在这分享一下我给小学妹讲十大经典排序算法的过程. 好吧,那我们 ...
- 【完整可运行源码+GIF动画演示】十大经典排序算法系列——冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序、堆排序、计数排序、桶排序、基数排序
以前也零零碎碎发过一些排序算法,但总是不系统, 这次彻底的对排序系列做了一个整体的规划, 小伙伴们快快mark哦~ [GIF动画+完整可运行源代码]C++实现 冒泡排序--十大经典排序算法之一 [GI ...
最新文章
- TensorFlow创建DeepDream网络
- 非技术成本继续困扰光伏产业
- 第十六届全国大学生智能车竞赛山东赛区成绩汇总
- HashMap集合和TreeMap集合
- 闪退的解决方法_王者荣耀2.0不闪退需要什么手机?王者荣耀2.0闪退解决方法
- 看着手机会让您晕眩吗? 禁用动画
- jquery 操作css 选择器
- 阿里云使用笔记-Lrzsz上传下载文件-centos7
- Golang Json文件解析为结构体工具-json2go
- WordPress仿站实战教程
- 【asp.net core 系列】6 实战之 一个项目的完整结构
- java web景点规划导航
- 去掉百度地图API左下角的百度LOGO方法
- python求特征值以及特征向量,并且输出最小特征值对应的特征向量
- 作为产品经理的你,画原型图时崩溃过吗?
- 基于Java的个人日记本项目(附 源码 课件)
- Teen Readers【青少年读者】
- ARFoundation之路-光照估计
- Python 绘制柱状图和双柱状图
- DiskLruCache源码解析