冒泡排序

冒泡排序,顾名思义就像水中的气泡一样,气泡越大,上浮的越快。

以整数数组为例,数值越大的元素我们就认为它越应该出现在数组的右边,这样就构成了一个递增数组。

对于含有n个元素的数组values,我们每次从左向右扫描出一个最大的,可以得知,经过n-1次扫描我们即可得到一个有序数组。

c++版本:

  1. #include <iostream>  
  2. #include <stdlib.h>  
  3. #include <time.h>  
  4.   
  5. void buddle_sort(int a[], int n)  
  6. {  
  7.   for (int i = 0; i < n - 1; ++i)  
  8.     for (int j = 0; j < n - i - 1; ++j)  
  9.       if (a[j] > a[j + 1])  
  10.       {  
  11.         int tmp = a[j];  
  12.         a[j] = a[j + 1];  
  13.         a[j + 1] = tmp;  
  14.       }  
  15. }  
  16.   
  17. void print(int a[], int n)  
  18. {  
  19.   for (int i = 0; i < n; ++i)  
  20.     std::cout << a[i] << " ";  
  21.   std::cout << std::endl;  
  22. }  
  23.   
  24. int main()  
  25. {  
  26.   ::srand(::time(NULL));  
  27.   const int num = 40;  
  28.   int a[num] = {0};  
  29.   for (int i = 0; i < num; ++i)  
  30.     a[i] = ::rand() % 10;  
  31.   
  32.   buddle_sort(a, num);  
  33.   print(a, num);  
  34.   return 0;  
  35. }  
#include <iostream>
#include <stdlib.h>
#include <time.h>

void buddle_sort(int a[], int n)
{
  for (int i = 0; i < n - 1; ++i)
    for (int j = 0; j < n - i - 1; ++j)
      if (a[j] > a[j + 1])
      {
        int tmp = a[j];
        a[j] = a[j + 1];
        a[j + 1] = tmp;
      }
}

void print(int a[], int n)
{
  for (int i = 0; i < n; ++i)
    std::cout << a[i] << " ";
  std::cout << std::endl;
}

int main()
{
  ::srand(::time(NULL));
  const int num = 40;
  int a[num] = {0};
  for (int i = 0; i < num; ++i)
    a[i] = ::rand() % 10;

  buddle_sort(a, num);
  print(a, num);
  return 0;
}

该排序算法是稳定的,时间复杂度是O(n2)

附上go语言版本

  1. package main  
  2.   
  3. import "fmt"  
  4. import "math/rand"  
  5. import "time"  
  6.   
  7. func buddle_sort(values []int) {  
  8.   for i := 0; i < len(values)-1; i++ {  
  9.     for j := 0; j < len(values)-i-1; j++ {  
  10.       if values[j] > values[j+1] {  
  11.         values[j], values[j+1] = values[j+1], values[j]  
  12.       }  
  13.     }  
  14.   }  
  15. }  
  16.   
  17. func main() {  
  18.   values := make([]int, 10)  
  19.   fmt.Print(len(values), " ", cap(values), " ")  
  20.   rand.Seed(int64(time.Now().Nanosecond()))  
  21.   for i := 0; i < len(values); i++ {  
  22.     values[i] = rand.Int() % 10  
  23.   }  
  24.   buddle_sort(values)  
  25.   for _, v := range values {  
  26.     fmt.Print(v, " ")  
  27.   }  
  28.   fmt.Println()  
  29. }  
原文地址:https://www.cnblogs.com/xiao-wei-wei/p/3391654.html