Loading

排序算法4--交换排序--冒泡排序

冒泡排序

冒泡排序属于交换排序、交换排序的思想是:两两比较待排序记录的关键字,一旦发现两个记录不满足次序要求时则进行交换,直到整个序列全部满足要求为止。快速排序是在冒泡排序的基础上进行改进得到的

 

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

 

posted @ 2017-04-22 16:21  爱笑的眼睛真美  阅读(322)  评论(0编辑  收藏  举报