zoukankan      html  css  js  c++  java
  • 排序算法冒泡排序及其优化

    冒泡排序的原理:可以从最后一个元素开始,依次比较相邻两个元素,较小的数往上冒,一次循环结束,最小的元素上升到首位置,然后继续这样比较剩下的n-1个元素。

    冒泡排序及其优化
      1 #include <iostream>
    2 using namespace std;
    3
    4
    5 //元素交换
    6 void swap(int &a,int &b)
    7 {
    8 int temp=a;
    9 a=b;
    10 b=temp;
    11 }
    12
    13 /*///////////////////////////////////////////////
    14 冒泡排序(未优化版本)
    15 */
    16 void BubbleSort(int *a,int len)
    17 {
    18 int i,j;
    19 for(i=0;i<len;i++)
    20 {
    21 for(j=len-1;j>i;j--)
    22 {
    23 if(a[j]<a[j-1])
    24 swap(a[j],a[j-1]);
    25 }
    26 }
    27 for(i=0;i<len;i++)
    28 cout<<a[i]<<" ";
    29 cout<<endl;
    30 }
    31 /////////////////////////////////////////////////
    32
    33
    34 /*///////////////////////////////////////////////
    35 优化冒泡排序方法1
    36 用j获取最后一次元素交换的位置pos,用来改变每次循环的范围
    37 */
    38 void BubbleSort(int *a,int len)
    39 {
    40 int i,j=len-1,pos;
    41 while(j>0)
    42 {
    43 pos=0;
    44 for(i=0;i<j;i++)
    45 {
    46 if(a[i]>a[i+1])
    47 {
    48 swap(a[i],a[i+1]);
    49 pos=i;
    50 }
    51 }
    52 j=pos;
    53 }
    54 for(i=0;i<len;i++)
    55 cout<<a[i]<<" ";
    56 cout<<endl;
    57 }
    58 /////////////////////////////////////////////////
    59
    60
    61 /*///////////////////////////////////////////////
    62 优化冒泡排序方法2(就是添加一个标志位,比较容易理解)
    63 设置标志位,用于判断一次冒泡排序中是否有交换元素,
    64 若没有,则表示已排序好。
    65 */
    66 void BubbleSort(int *a,int len)
    67 {
    68 int i,j;
    69 bool flag = false;
    70 for(i=0;i<len;i++)
    71 {
    72 for(j=len-1;j>i;j--)
    73 {
    74 if(a[j]<a[j-1])
    75 {
    76 swap(a[j],a[j-1]);
    77 flag = true;
    78 }
    79 }
    80 if(flag == false)
    81 break;
    82 }
    83 for(i=0;i<len;i++)
    84 cout<<a[i]<<" ";
    85 cout<<endl;
    86 }
    87 ////////////////////////////////////////////
    88
    89
    90
    91 int main()
    92 {
    93 int n,i,a[20];
    94 cout<<"请输入数组元素n:"<<endl;
    95 cin>>n;
    96 cout<<"请输入"<<n<<"个元素:"<<endl;
    97 for(i=0;i<n;i++)
    98 cin>>a[i];
    99 BubbleSort(a,n);
    100 return 0;
    101 }

    最好的情况下,即数组本身是排序好的,这时进行n-1次比较,时间复杂度为O(n);最坏的情况下,即数组是逆序的,需要比较次数为:1+2+3+…+(n-1)=n(n-1)/2,推导出时间复杂度为O(n^2)。

    continue my dream...
  • 相关阅读:
    黑马程序员_网络编程
    黑马程序员_ 异常
    黑马程序员_面向对象基础
    黑马程序员_循环语句的使用
    黑马程序员_面向对象深入2
    黑马程序员_ JAVA中的多线程
    黑马程序员_JAVA基础知识总结3
    OC-内存管理
    OC-核心语法(3)(分类、SEL、类本质)
    OC-核心语法2-构造方法
  • 原文地址:https://www.cnblogs.com/chenbin7/p/2197775.html
Copyright © 2011-2022 走看看