冒泡排序和选择排序
2015-11-07 14:35
190 查看
两种很简单的排序方法,冒泡排序和选择排序。
下面按照从小到大排序来做说明:
冒泡排序:每次将未排序的数组从前往后两个相邻的元素作比较,如果前面的元素比后一个元素小,那么将这两个元素交换,那么实质上这种交换是将大的元素往后移动了一位,这样一遍排序之后,最大的元素就被放到数组的最后。然后对前面的n -1 个元素重复这个过程。
选择排序:选择排序实际上对冒泡排序做了一定的改进,它也是每次把两个元素作比较,但是这种比较不是两个相邻的元素之间,而是所有元素之间,这种所有元素的比较中,可以找出最小元素,然后放在第一位(这样就避免了冒泡排序中,可以避免的元素交换),后面的步骤以此类推。
两种排序十分的相识,算法的时间复杂度都是O(n2),但是两种算法的重要区别之一就是冒泡排序是稳定的,但是选择排序是不稳定的算法。比如[99,99,5] ,如果我想把从前往后把最大的放到最后面,那么第一个99就放到了第二个99的后面。相对位置发生了改变。
下面是实现的代码:
冒泡排序:
选择排序:
下面按照从小到大排序来做说明:
冒泡排序:每次将未排序的数组从前往后两个相邻的元素作比较,如果前面的元素比后一个元素小,那么将这两个元素交换,那么实质上这种交换是将大的元素往后移动了一位,这样一遍排序之后,最大的元素就被放到数组的最后。然后对前面的n -1 个元素重复这个过程。
选择排序:选择排序实际上对冒泡排序做了一定的改进,它也是每次把两个元素作比较,但是这种比较不是两个相邻的元素之间,而是所有元素之间,这种所有元素的比较中,可以找出最小元素,然后放在第一位(这样就避免了冒泡排序中,可以避免的元素交换),后面的步骤以此类推。
两种排序十分的相识,算法的时间复杂度都是O(n2),但是两种算法的重要区别之一就是冒泡排序是稳定的,但是选择排序是不稳定的算法。比如[99,99,5] ,如果我想把从前往后把最大的放到最后面,那么第一个99就放到了第二个99的后面。相对位置发生了改变。
下面是实现的代码:
冒泡排序:
/** * Created by Neway on 2015/11/7. */ public class BubbleSort implements Sort { @Override public void sort(int[] arr) { for(int i = 0 ; i < arr.length; i++) { for(int j = 0 ; j < arr.length - i - 1; j++) { if(arr[j] > arr[j+1]) { int temp = arr[j+1]; arr[j+1] = arr[j]; arr[j] = temp; } } } } }
选择排序:
/** * Created by Neway on 2015/11/7. */ public class PickSort implements Sort { /** * 每次从待排序的数组中选出一个最小的值放在排好序数组的最后面 * * @param arr */ @Override public void sort(int[] arr) { int minValue = Integer.MIN_VALUE; for (int i = 0; i < arr.length; i++) { int minIndex = i; for (int j = i; j < arr.length; j++) { if (arr[minIndex] > arr[j]) { minIndex = j; } } int temp = arr[minIndex]; arr[minIndex] = arr[i]; arr[i] = temp; } } }
相关文章推荐
- 在命令行用 sort 进行排序
- 冒泡排序
- 文件遍历排序函数
- ruby 数组使用教程
- Ruby中的数组和散列表的使用详解
- C#实现AddRange为数组添加多个元素的方法
- C#选择排序法实例分析
- C#动态调整数组大小的方法
- C#插入法排序算法实例分析
- 详解Lua中的数组概念知识
- C#实现Datatable排序的方法
- Perl中的列表和数组学习笔记
- 探索PowerShell (八) 数组、哈希表(附:复制粘贴技巧)
- C#中数组初始化与数组元素复制的方法
- C#交错数组用法实例
- SQLSERVER的排序问题结果不是想要的
- Linux Shell 数组建立及使用技巧
- PowerShell数组的一些操作技巧
- Windows Powershell排序和分组管道结果
- C#通过yield实现数组全排列的方法