码迷,mamicode.com
首页 > 编程语言 > 详细

数据结构与算法——冒泡排序

时间:2015-06-14 21:30:27      阅读:155      评论:0      收藏:0      [点我收藏+]

标签:数据结构与算法   冒泡排序   算法   数据结构   

什么是冒泡排序?

  冒泡排序是一种交换排序,所谓交换,就是将相邻元素两两比较,如果反序则进行交换从而使元素有序。之所以叫冒泡排序是因为,元素是从最后开始进行两两比较,将小的元素放到最上面的位置,看上去就跟气泡往上冒一样。

代码实现

<span style="font-family:Courier New;font-size:14px;">#include <iostream>
#define MAXSIZE 10
using namespace std;
struct SqList {
    int r[MAXSIZE];
    int length;
};

//元素交换
void swap(SqList *L,int i,int j) {
    int temp;
    temp = L->r[i];
    L->r[i] = L->r[j];
    L->r[j] = temp;
}
/**
    冒泡排序 共需进行n-1趟
    从最后一个元素开始依次与前一个元素进行比较,
    若小于前一个元素,则进行交换
*/
void BubbleSort(SqList *L) {
    int i,j;
    for(i=1;i<L->length;i++) {
        for(j=L->length-1;j>=i;j--) {
            if(L->r[j]>L->r[j+1]) {
                swap(L,j,j+1);
            }
        }

    }
}
/**

    增进版 冒泡排序
    这是为了再进行一两次比较后,元素已经有序了,
    后面不再需要进行比较排序了。
    比如序列:2,1,3,4,5,6,7,8,9
    当进行完依次比较后,此时序列为1,2,3,4,5,6,7,8,9
    那么此时已经有序了,因此后面就无序比较,直接退出循环就行
    所以,引入一个标志变量,当元素交换时置为true,没有时置为false
    则在外循环中,当变量为false时,就退出循环了,说明此时已经有序了
*/
void BubbleSort2(SqList *L) {
    int i,j;
    bool flag = true;
    for(i=1;i<L->length&&flag;i++) {
        flag = false;
        for(j=L->length-1;j>=i;j--) {
            if(L->r[j]>L->r[j+1]) {
                swap(L,j,j+1);
                flag = true;
            }
        }
    }
}
void Print(SqList *L) {
    for(int i=1;i<=L->length;i++) {
        cout<<L->r[i]<<" ";
    }
    cout<<endl;
}

int main()
{
    SqList s={{0,9,1,5,8,3,7,4,6,2},9}; //0为占位
    cout<<"排序前:"<<endl;
    Print(&s);
    BubbleSort(&s);
    cout<<"排序后:"<<endl;
    Print(&s);
    return 0;
}
</span>


数据结构与算法——冒泡排序

标签:数据结构与算法   冒泡排序   算法   数据结构   

原文地址:http://blog.csdn.net/hsk256/article/details/46493983

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!