数据结构与算法(13)冒泡排序

来源:互联网 发布:ps软件使用视频教程 编辑:程序博客网 时间:2024/05/16 12:34

冒泡排序的原理

将临近元素依次进行比较,如果顺序不符合要求就调整到正确的顺序。如有n个元素就进行 n - 1趟这样的比较,每趟比较可以将一个最值元素位置确定下来,这样的排序算法称为冒泡排序

这里写图片描述

测试代码

/*冒泡排序算法时间复杂度为O(n^2)*/#include <stdio.h>#include <stdlib.h>#pragma warning(disable: 4996)#define LIST_MAX_SIZE 20#define OK 1#define ERROR 0#define TRUE 1#define FALSE 0typedef int Status;typedef char DataType[10];typedef int KeyType;typedef struct{    KeyType key;    DataType data;}Node;typedef Node List[LIST_MAX_SIZE];Status Swap(Node *L1, Node *L2){    Node temp;    temp = *L1;    *L1 = *L2;    *L2 = temp;    return OK;}/*按递增的顺序,冒泡排序*/Status BubbleSort_1(List L, int n){    int i, j;    for (i = 0; i < n - 1; ++i){        //需要检查n - 1次,将n - 1个元素进行归位        for (j = 0; j < n - 1 - i; ++j){//每次归位的是最后一个元素,减而治之剩下的元素            if (L[j].key > L[j + 1].key){                Swap(&L[j], &L[j + 1]);            }        }    }    return OK;}/*按照递减的顺序进行冒泡排序*/Status BubbleSort_2(List L, int n){    int i, j;    for (i = 0; i < n - 1; ++i){        for (j = 0; j < n - 1 - j; ++j){            if (L[j].key < L[j + 1].key){                Swap(&L[j], &L[j + 1]);            }        }    }    return OK;}/*可以将排好序的元素放置在左侧位置*/Status BubbleSort_3(List L, int n){    int i, j;    for (i = 0; i < n - 1; ++i){        for (j = i; j < n - 1; ++j){            if (L[j].key < L[j + 1].key){                Swap(&L[j], &L[j + 1]);            }        }    }    return OK;}int main(){    List L;    int n, i;    KeyType a[] = { 12, 32, 43, 124, 454, 23, 12, 45, 565 };    n = sizeof(a) / sizeof(a[0]);    for (i = 0; i < n; ++i){        L[i].key = a[i];    }    BubbleSort_1(L, n);    printf("递增顺序为: \n");    for (i = 0; i < n; ++i){        printf("%d ", L[i].key);    }    printf("\n");    BubbleSort_3(L, n);    printf("递减顺序为: \n");    for (i = 0; i < n; ++i){        printf("%d ", L[i].key);    }    printf("\n");    system("pause");    return 0;}
0 0
原创粉丝点击