冒泡排序

来源:互联网 发布:剑倚天下宠物进阶数据 编辑:程序博客网 时间:2024/06/05 10:07

C++ 实现冒泡排序

理解一:考虑每一轮的最后一个元素,根据最后的元素进行冒泡

#include "stdafx.h"#include <iostream>using namespace std;int main(){    int N;    cin >> N;    int *a = new int[N];    for (int i = 0; i<N; i++) {        cin >> a[i];    }    for (int i = 0; i<N; i++) {        cout << a[i];    }    cout << endl;    for (int i = N - 1; i >= 0; i--) {        for (int j = 0; j<i; j++) {        /*i是每一轮排序的最后一个元素*/            if (a[j]>a[j + 1]) {                int temp = a[j];                a[j] = a[j + 1];                a[j + 1] = temp;            }        }    }    for (int i = 0; i<N; i++) {        cout << a[i];    }    delete[] a;    a = NULL;    return 0;}

理解二:根据轮数进行冒泡

#include <iostream>using namespace std;int main(){    int N;    cin>>N;    int *a = new int[N];    for(int i=0;i<N;i++)        cin>>a[i];    for(int i = 0; i<N; i++){            /*i表示循环的次数,第i次即表示第i轮*/        for(int j = 0;j<N-i-1 ;j++){            /*在当前这一轮,冒泡排序将最大的元素沉到最底下,接着就不需要再考虑最后一个元素,            只需考虑剩下的N-i个元素,因为是下标,所以 N-i-1例如a[0]需要和a[1]~a[9]比较*/            if (a[j]>a[j + 1]) {                int temp = a[j];                a[j] = a[j + 1];                a[j + 1] = temp;            }        }    }    for(int i=0; i<N;i++)        cout<<a[i];    free(a);    a = NULL;    return 0;}

理解三:
其实和上面的理解一样,只不过用一个for循环(实际还是O(n^2))实现。

#include "stdio.h"int main(){    int a[]={12,13,65,64,86,21,37,1,95,4};    int l = 10;    for(int i=0;i<10;i++){        printf("%d\t",a[i]);    }    for(int i =0;i<l;i++){        //("hello\n");        if(a[i]>a[i+1]){            int temp=a[i];            a[i]=a[i+1];            a[i+1]=temp;        }        if(i==l-1){            i=-1;            l--;        }    }    for(int i=0;i<10;i++){        printf("%d\t",a[i]);    }    return 0;}