冒泡排序
冒泡排序属于交换排序、交换排序的思想是:两两比较待排序记录的关键字,一旦发现两个记录不满足次序要求时则进行交换,直到整个序列全部满足要求为止。快速排序是在冒泡排序的基础上进行改进得到的
1.冒泡排序法是两两依次比较,并做交换,交换的次数多。
冒泡法(每次是相邻的两个比较大小,每一轮都会选出当前的最大的数沉到最下面)
例如:
原始队列: 3 5 6 2 4 1(3,5,比较不交换;56比较不交换;62比较交换;64比较交换;61比较交换)
第一次: 3 5 2 4 1 6 (35比较不交换;52比较交换;54比较交换;51比较交换;56比较不交换)
第二次: 3 2 4 1 5 6
第三次: 2 3 1 4 5 6
第四次: 2 1 3 4 5 6
第五次: 1 2 3 4 5 6
2.时间复杂度
最好情况(初试序列是正序):只需要进行一趟排序
最坏情况(初试序列是逆序):需要进行n-1趟排序
平均时间复杂度O(n*n),空间复杂度O(1)
具体时间复杂度等分析,请参考:http://www.cnblogs.com/zhangxue521/p/6748085.html
3.算法特点:
①稳定排序②可用于顺序链式存储
java实现:
1 package 平时常用; 2 3 import java.util.Scanner; 4 5 public class _1冒泡排序 { 6 public static void main(String[] args) { 7 int a[] = new int[6]; 8 Scanner scanner = new Scanner(System.in); 9 for (int i = 0; i < a.length; i++) { 10 a[i] = scanner.nextInt(); 11 } 12 13 for (int i = 0; i < a.length-1; i++) { 14 for (int j = 0; j < a.length-1-i; j++) { 15 if (a[j] > a[j+1]) { 16 int temp = a[j]; 17 a[j] = a[j+1]; 18 a[j+1] = temp; 19 } 20 } 21 //测试每轮的排序结果 22 // for (int m : a) { 23 // System.out.print(m+" "); 24 // } 25 // System.out.println(); 26 } 27 //输出结果 28 for (int m : a) { 29 System.out.print(m+" "); 30 } 31 } 32 }
js实现:
1 function maoPaoSort(a){ 2 for (var i = 0; i < a.length-1; i++) { 3 for (var j = 0; j < a.length-1-i; j++) { 4 if (a[j] > a[j+1]) { 5 var temp = a[j]; 6 a[j] = a[j+1]; 7 a[j+1] = temp; 8 } 9 } 10 } 11 } 12 var a = new Array(7,2,6,5,1,4,3); 13 maoPaoSort(a); 14 document.write("_4冒泡排序"+a+"<br />");
python实现:
1 def maopaoSort(listNums): 2 length = len(listNums) 3 for i in range(0,length-1): 4 for j in range(0,length-1-i): 5 if listNums[j] > listNums[j+1]: 6 listNums[j], listNums[j + 1] = listNums[j + 1], listNums[j] 7 return listNums