1、原理:比较相邻的两个元素,将值大的元素交换至右端。
2、思路:(1)比较相邻的元素。将小数放在前面,大数放在后面;
(2)对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这样在最后的元素应该会是最大的数;
(3)针对所有的元素重复以上的步骤,除了最后一个;
(4)持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
3、算法实现
/* * 冒泡排序 * */ public class BubbleSort { public static void main(String[] args) { // TODO Auto-generated method stub int []a =new int[] {2,5,1,4,9,6,8,7,0,3}; bubble_sort(a); show(a); } //冒泡排序算法实现 private static void bubble_sort(int[] a) { // TODO Auto-generated method stub for(int i=0;i<a.length-1;++i) { for(int j=1;j<a.length-i;++j) { //相邻两元素比较 if(a[j-1] > a[j]) { int temp=a[j-1]; a[j-1]=a[j]; a[j]=temp; } } } } //打印结果 private static void show(int[] a) { // TODO Auto-generated method stub //在单行中打印数组 for(int i=0;i<a.length;++i) { System.out.print(a[i]+" "); } System.out.println(); } }4、算法分析
最佳情况:T(n) = O(n);最差情况T(n) = O(n²);平均情况T(n) = O(n²)
二、选择排序(Selection Sort)
1、原理:找到最小的数和第一个数交换
2、思路:(1)首先找到数组中最小的数
(2)将它与数组第一个数交换位置(如果第一个元素就是最小数那么他就和自己交换)
(3)在剩下的数组中找到最小的数,将它与数组的第二个元素交换位置
(4)如此往复,直到将整个数组排序
3、算法实现
/** *选择排序算法实现 */ public class Selection { //对数组a进行排序 public static void sort(int[]a) { //将a按升序排列 for(int i=0;i<a.length;++i) { int min=i; for(int j=i+1;j<a.length;++j) { if(a[min] > a[j]) min=j; //找到最小的元素的位置 } //交换 int temp=a[min]; a[min]=a[i]; a[i]=temp; } } //打印结果 private static void show(int[] a) { // TODO Auto-generated method stub //在单行中打印数组 for(int i=0;i<a.length;++i) { System.out.print(a[i]+" "); } System.out.println(); } public static void main(String[] args) { int []a =new int[] {2,5,1,4,9,6,8,7,0,3}; sort(a); show(a); } }4、算法分析
最佳情况:T(n) = O(n²);最差情况T(n) = O(n²);平均情况T(n) = O(n²)