简单排序算法(一)
来源:互联网 发布:乐乎青年公寓通州北苑 编辑:程序博客网 时间:2024/05/17 22:40
冒泡排序
冒泡应该是我们学过的最简单的算法了。它的原理很简单,以升序为例:从左到右,逐个比较,如果左边比右边大则交换,这样一次遍历之后选出一个最大的,再重复此操作。示例代码如下:
void bubblesort(int n,int data[]){ //n为数组的大小 int i,j,tem; for(i=0;i<n;i++) for(j=0;j<n-1;j++) if(data[j]>data[j+1]){ tem=data[j]; data[j]=data[j+1]; data[j+1]=tem; }}
快速排序
快排不是一个稳定的排序算法–即多个相同的值在排序结束后相对位置会发生变化。算法思路:先选取一个数据(通常是数组的第一个)作为关键值(key),从数组的两头向中间遍历,先从右边找一个比key小的移到左边,再从左边找一个比key大的移到右边。这样,一次完整的遍历之后,key的左边全是比它小的数,key的右边全是比它大的数。即,数值key的位置已经确定了。只需要分别对它的左右两部分用同样的方法进行排序。
void quicksort(int L,int r,int data[]){ //L,r为待排序数组左右两端的下标 int i,j,tem; i=L;j=r;tem=data[L]; //取数组的第一个值作为key值 if(L>=r) return; while(i<j){ //i=j时该次遍历结束 while(i<j&&data[j]>=tem) j--; //找到一个比key值小的 data[i]=data[j]; while(i<j&&data[i]<=tem) i++; //找到一个比key值大的 data[j]=data[i]; } data[i]=tem; //该次遍历结束后将key值位置已经确定。 quicksort(L,i-1,data); //分别对左边、右边的部分用同样的方法进行排序 quicksort(i+1,r,data);}
归并排序
归并排序的中心思想是二路归并。即将两个有序序列合并成一个有序序列。归并排序利用递归来实现,先从上到下分组,再从下到上归并。如图:这里写图片描述
void mergsort(int L,int r,int data[]){ int i,j,mid,p; static int tem[data_size]; //申请一个和数组同样大小的数据空间 if(L==r) return; mid=(L+r)/2; i=L;j=mid+1;p=L; mergsort(L,mid,data); //分组排序 mergsort(mid+1,r,data); while(i<=mid||j<=r) { //将2个有序序列归并为一个 if(i>mid) { tem[p++]=data[j++]; continue; } if(j>r){ tem[p++]=data[i++]; continue; } if(data[i]<data[j]) tem[p++]=data[i++]; else tem[p++]=data[j++]; } for(i=L;i<=r;i++) data[i]=tem[i];}
0 0
- 简单排序算法(一)
- 排序算法一:简单插入排序
- 若干排序算法简单汇总(一)
- 若干排序算法简单汇总(一)
- 简单的排序算法整理(一)
- 算法一之简单选择排序
- 算法一之简单选择排序
- 排序算法(一)——简单选择排序
- 神的规范:排序算法(一):简单插入排序
- 一、常见算法之排序算法简单描述
- 排序一 简单排序
- 【算法】简单排序算法
- 学习JAVA中(一) 一些简单的排序算法
- 数据结构的学习一简单排序算法1
- 各种排序算法及时间&空间复杂度详解(一)简单排序算法
- 排序算法之简单排序
- 简单排序算法--冒泡排序
- 简单排序算法--选择排序
- 166. Fraction to Recurring Decimal
- eclipse从数据库获取数据时控制台乱码问题
- EventBus3.0性能优化之添加索引(Index)
- ios 应用内支付(In-App Purchase,沙盒测试,后台验证)
- 装修之mybatis环境搭建
- 简单排序算法(一)
- Android LIstView隐藏滚动条
- canvas中2D画线详解
- 初识Java设计模式之Builder
- MySQL中授权(grant)和撤销授权(revoke) 【转】
- java多线程状态
- 软件设计和软件开发的主旨
- Spring事务配置的五种方式
- Xcode 7 创建 Empty Application 工程