---------------------- ASP.Net+Android+IO开发S、.Net培训、期待与您交流! ----------------------
作为一个初学者,排序算法可能是接触到的最早的逻辑实例了,而且这些个逻辑还确实有点伤脑筋,那我就将一些经典的排序算法记下来吧,以后也可以来瞧瞧。
一、冒泡排序
最直接、最好理解、初学者最容易想到的排序算法!但是好像效率在大量的数据方面有些不足。
冒泡排序算法的运作如下(升序):
- 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
- 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
- 针对所有的元素重复以上的步骤,除了最后一个。
- 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
用java代码实现:
public void bubbleSort(int[] arr) { int m = 0; for (int i = 0; i < arr.length - 1; i++) { for (int j = 0; j < arr.length - i - 1; j++) { if (arr[j] > arr[j+1]) { m = arr[j]; arr[j] = arr[j+1]; arr[j+1] = m; } } } }
二、选择排序
首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。
这种方法因为每一次只需要交换一次特定的数据,所以可以将需要交换的数据记录到内存里边,等一轮判断完毕之后,再交换存放在堆中的数据,这样可以提高效率。。
用java代码实现
public static void selectSort(int[] arr){ for(int i=0; i<arr.length; i++){ int temp = i; for(int j=i+1; j<arr.length; j++){ if(arr[temp] > arr[j]){ temp = j; } } int x = arr[i]; arr[i] = arr[temp]; arr[temp] = x; } }
三、插入排序
工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。就是将数组第一个值看做有序的,从后每一个值放进来的时候,找放的位置。这里边就需要一些已经排好的数据可能会整体左移或者右移,所以用插入排序的算法也可以找到新数据存放到有序数组中的位置
用java代码实现:
public static void insertSort(int[] arr) { //定义循环控制变量 int i, j; //定义哨兵 int guard; for (i = 1; i < arr.length; i++) { if (arr[i] < arr[i - 1]) { guard = arr[i]; j = i - 1; do { arr[j + 1] = arr[j]; j--; } while (j != -1 && guard < arr[j]); arr[j + 1] = guard; } } }
以上是三种最基本的排序算法,现在效率最高的并不在里面,而是一种叫做希尔排序的算法,有时间我还得去研究下,目前最主要的是先好好学基本的东西,深入了解可以放到后面。
---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------
详细请查看:http://edu.csdn.net
相关推荐
黑马程序员-SpringCloud-学习笔记01-认识微服务
黑马程序员-SpringCloud-学习笔记-03-Eureka注册中心
黑马QT讲义,适合QT入门,使用,教程很比较基础,新手可以看看,另外视频链接在哔哩哔哩中。
黑马程序员-SpringCloud-学习笔记-02-微服务拆分及远程调用
黑马程序员 - Java基础教学 - 05 - 面向对象(1).doc
黑马程序员 - 毕向东 - Java基础教学 - 第02天 个人观看视频总结文档
黑马程序员-java32期培训视频(基础+就业)黑马程序员-java32期培训视频(基础+就业)
黑马程序员 - Java基础教学 - 04 - 数组、进制转换、二维数组
黑马程序员-梅兰商城项目实战,包含图片素材和编写源码。
黑马程序员 - 毕向东 - Java基础教学 - 第01天 个人观看视频总结文档
day01_Object类、常用API day02_Collection、泛型 day03_List、Set、数据结构、Collections day04_Map,斗地主案例 day05_异常,线程 day06_线程、同步 ...day13_Stream流、方法引用 Java基础小节练习题答案
C++黑马程序员-演讲比赛流程管理系统记录
黑马程序员 - Java基础教学 - 03 - 变量的作用域、for循环、break、continue、内存结构
黑马程序员 - Java基础教学 - 08 - 面向对象(4)-多态.doc
NULL 博文链接:https://840198532-qq-com.iteye.com/blog/1490901
黑马程序员--毕向东全套Java视屏,讲解的相当全面,各位如果需要,尽快下载哦! 另外如果视频链接存在打不开的问题,请留言,必定及时更新链接。
NULL 博文链接:https://840198532-qq-com.iteye.com/blog/1490903
黑马程序员 - Java基础教学 - 06 - 面向对象(2) - 关于静态static的那些事.doc
NULL 博文链接:https://840198532-qq-com.iteye.com/blog/1490899
NULL 博文链接:https://840198532-qq-com.iteye.com/blog/1490905