Java-经典排序算法(一)
来源:互联网 发布:linux解压tar包命令 编辑:程序博客网 时间:2024/05/22 06:19
前言:
排序算法有很多种,如选择排序、插入排序、冒泡排序、桶排序、快速排序等等。这里介绍的是简化版桶排序、冒泡排序和插入排序。
推荐一本算法入门书——《啊哈!算法》
1. 桶排序[简化版]:
原理:新建一个book数组用来标记原数组每一个数字出现的个数。
public static int[] bottomSort(int[] nums) {int[] res = new int[nums.length];int temp = nums[0];for (int lang : nums)temp = Math.max(temp, lang);int[] book = new int[temp + 1];for (int i = 0; i < nums.length; i++) {book[nums[i]]++;}int z = 0;for (int i = 0; i <= book.length - 1; i++) { //由小到大排序。for (int j = 1; j <= book[i]; j++) {res[z] = i;z++;}}return res;}
桶排序的优缺点:
优点:
时间复杂度为O(M+N),运行非常快速。
缺点:
1.由于book数组的大小由原数组中最大值决定,因此非常地浪费空间。
2.只能处理int型数组,不能处理float/double型数组。
2.冒泡排序
冒泡排序所用代码最少,易于理解和记忆,所以使用最是频繁。
冒泡排序的基本思想是:每次比较两个相邻的元素,如果它们的顺序错误就把它们交换过来.冒泡排序的核心部分是双重嵌套循环。
public static void bubbleSort(int[] nums) {for (int i = 0; i < nums.length; i++) {for (int j = 0; j < nums.length; j++) {if (nums[i] < nums[j] && i > j) {int temp = nums[i];nums[i] = nums[j];nums[j] = temp;}}}}
冒泡排序优缺点:
优点:
代码量少,易于使用。
缺点:
冒泡排序的时间复杂度是O(N^2)。这是一个非常高的时间复杂度。
假如我们的计算机每秒钟可以运行10亿次,那么对1亿个数进行排序,桶排序只需要0.1秒,而冒泡排序则需要1千万秒(引用自《啊哈!算法》)
3. 插入排序:
插入排序基本思想:
插入算法把要排序的数组分成两部分:第一部分包含了这个数组的所有元素,但将最后一个元素除外(让数组多一个空间才有插入的位置),而第二部分就只包含这一个元素(即待插入元素)。在第一部分排序完成后,再将这个最后元素插入到已排好序的第一部分中。插入排序的基本思想是:每步将一个待排序的纪录,按其关键码值的大小插入前面已经排序的文件中适当位置上,直到全部插入完为止。
public static int[] InsertSort(int[] arr) {int i, j;int insertNote;// 要插入的数据int[] array = arr;// 从数组的第二个元素开始循环将数组中的元素插入for (i = 1; i < array.length; i++) {// 设置数组中的第2个元素为第一次循环要插入的数据insertNote = array[i];j = i - 1;while (j >= 0 && insertNote < array[j]) {// 如果要插入的元素小于第j个元素,就将第j个元素向后移动array[j + 1] = array[j];j--;}// 直到要插入的元素不小于第j个元素,将insertNote插入到数组中array[j + 1] = insertNote;}return array;}
插入排序的时间复杂度也是O(n^2),另外选择排序也是。插入排序和冒泡排序的思想其实是相似的,通过将大小不同的两个值对调索引来实现排序,不过插入排序相对于冒泡排序而言所用时间应该更少一点。
推荐一篇讲解插入排序的博客:
http://www.cnblogs.com/xiaoming0601/p/5862793.html
阅读全文
1 0
- Java-经典排序算法(一)
- 经典排序算法(一)--冒泡排序、快速排序java实现
- Java经典算法(一)
- Java经典算法(一)
- java经典算法(一)
- Java经典算法(一)
- 经典排序算法之实现(一)
- 经典面试题-- 排序算法(一)
- 十大经典排序算法(一)
- 经典算法(一):冒泡排序
- 经典排序算法系列(一)--------------冒泡排序算法
- JAVA经典排序算法
- java经典排序算法
- java经典排序算法
- java经典算法排序
- JAVA 经典排序算法
- java经典排序算法
- java经典排序算法
- git好文
- 使用jsonschema2pojo根据JSON文件自动生成Java POJO类(Java Bean)源文件
- numpy计算及常用函数
- 使用mint-ui实现省市区三级联动效果
- 记一次redis-cluster分别重启之后发生的问题
- Java-经典排序算法(一)
- 正则表达式贪婪与非贪婪模式
- AndroidStudio 插件 之 Findbugs 安装与简单使用教程
- 微信小程序——交互反馈 toast
- 算法作业_29(2017.6.12第十七周)
- Flexjson
- 关于centos7.2 升级Python之后yum报错的问题
- 动态 SQL
- linux自己创建守护进程