主要的排序算法介绍
来源:互联网 发布:医学软件下载 编辑:程序博客网 时间:2024/06/05 01:18
关于排序,本人一直没有深入研究过,在实际的编码中,也偶尔有用到过排序,但我一直都是用的我自己的笨方法(后来知道这种方法的统称叫做选择排序,在后面的排序算法介绍中,我会首先介绍这种我最擅长的排序算法),随着自己编码经验的积累,感觉排序这一块,还是有必要学习一下的,所以就在网上搜索学习了一下主要的排序算法,因为是主要,所以只有八种,以下会用Java代码挨个介绍。
1)、选择排序(Selection Sort)
排序原理:一个数据序列有N个数据元素,那么需要执行N次选择排序:比如第1次排序时把最小的数据元素放在第一个位置,第二次把第2小的元素放在第二个位置,以此类推。
算法特点:时间复杂度为O( N^2 ),不怎么稳定,适用于所有的数据元素。
代码示例:
public class SortAlgorithm{public static void main(String args[]){int []arr = {3,5,7,23,56,23,67,35,67,89,1};System.out.println("这是未排序之前:");for(int i=0; i < arr.length; i++)System.out.print(arr[i]+" ");System.out.println();Sort sortProcess = new Sort();sortProcess.selectionSort(arr);System.out.println("这是未排序之后:");for(int i=0; i < arr.length; i++)System.out.print(arr[i]+" ");}}class Sort{public void selectionSort( int[] _a) //选择排序法{for( int pass=0; pass<_a.length; pass++ ) //pass之前的都是已经排序好的{for( int i=pass+1; i<_a.length; i++ ) //我们只需在pass后面的无序序列中遍历一下,找到最小的元素放在pass位置即可{if( _a[i] < _a[pass] ){int temp = _a[i];_a[i] = _a[pass];_a[pass] = temp;}}}}}程序运行效果如图:
2)、插入排序(InsertSort)
排序原理:这个与选择排序有点类似,也把整个数据序列分为有序和无序两个序列,有序的逐渐扩大,无序的逐渐减小。但与选择排序不同的是:插入排序是把无序序列中最前面的那个数据(还是按照升序排序)插入到有序序列中的合适位置,使得插入后有序序列依然保持有序。
算法特性:时间复杂度O( N^2 ),适用于所有数据元素。
代码示例:
public class SortAlgorithm{public static void main(String args[]){int []arr = {3,5,7,23,56,23,67,35,67,89,1};System.out.println("这是未排序之前:");for(int i=0; i < arr.length; i++)System.out.print(arr[i]+" ");System.out.println();Sort sortProcess = new Sort();sortProcess.insertSort(arr);for(int i=0; i < arr.length; i++)System.out.print(arr[i]+" ");}}class Sort{void insertSort(int[] a){int i;for( int pass=1; pass<a.length; pass++) //这个pass就是每次从无序序列中拿出的代插入元素的位置{int temp = a[pass]; //先保存一下这个待插入元素for( i=pass-1; i>=0; i--){if( a[i] < temp ) //如果发现有序中的某个元素小于待插入元素,那么就无需再扫描前面的有序数列了break;elsea[i+1] = a[i];}a[i+1] = temp; //小循环结束,把待插入元素放到这个合适的位置}System.out.println("现在我们使用的是插入排序法,排序后如下:");}}程序运行效果如图:
3)、冒泡排序(Bubble Sort )
算法原理:比如说我们要进行升序排列,那么先从最前面开始,对挨个相邻的两个数据进行比较,如果发现前面的数据大于后面的那个,那么交换它们,然后再比较下一对相邻的,以此类推,这样比完一组之后,最大的数据就在最后面了。再然后再以此类推,把第2大的数据放在倒数第2个位置。。。
算法特性:时间复杂度O( N^2 ),适用于所有数据类型。
代码示例:
public class SortAlgorithm{public static void main(String args[]){int []arr = {3,5,7,23,56,23,67,35,67,89,1};System.out.println("这是未排序之前:");for(int i=0; i < arr.length; i++)System.out.print(arr[i]+" ");System.out.println();Sort sortProcess = new Sort();sortProcess.bubbleSort(arr);for(int i=0; i < arr.length; i++)System.out.print(arr[i]+" ");}}class Sort{void bubbleSort( int[] a){int last = a.length-1; //用last表示成功冒泡数据的前一个位置for( int pass=0; pass<a.length; pass++ ){for( int i=0; i<last; i++ ){if( a[i] > a[i+1] ){int temp = a[i];a[i] = a[i+1];a[i+1] = temp;}}last--; //到这里说明成功的冒出一个大泡,把last往前推一个位置}System.out.println("冒泡排序处理过之后:");}}程序运行效果如图:
(先写这么多,以后有空会把后面几个较为复杂点的补上来)
- 主要的排序算法介绍
- 数据结构实验--------主要排序算法的实现
- 主要排序算法的比较及其优化
- 小结主要排序算法
- 主要排序算法汇总
- 主要排序算法实现
- 排序算法的相关介绍
- 排序算法易懂的介绍
- 【zt】ACM主要算法介绍
- 主要排序算法java实现
- 数组(主要介绍关于数组的一些常用算法)
- 8种主要排序算法的C#实现
- 8种主要排序算法的C#实现
- 主要的排序算法——Java实现
- 8种主要排序算法的C#实现 (一)
- 8种主要排序算法的C#实现 (二)
- 排序算法和查询算法的介绍
- 有趣的排序算法—入门介绍
- ChangeTabLayout实现过程
- 用vmware导入已经装好的linux 忘记密码怎么办
- STM32之CAN---接收管理分析
- Jenkins服务器磁盘空间管理策略
- 视图集和路由器(ViewSets & Routers)
- 主要的排序算法介绍
- 序列检测
- 一个程序汪的历程
- LoadRunner监控window系统各项指标详解
- [图像]用Matlab在图像上画矩形框
- vim使用记录
- linux mount cmd
- jQuery 效果
- oc——内置类型