C语言冒泡排序的实现

来源:互联网 发布:阿里云cdn测评 编辑:程序博客网 时间:2024/05/22 00:20

冒泡排序是一种最简单的排序方法,通过比较相邻的元素,若发生倒序,则交换,使最大值“沉”到最后。其空间复杂度为O(1),时间复杂度为O(n2)。冒泡排序是一种稳定的排序,可可用于顺序或者链式存储结构,平均时间性能比直接插入差。当初始记录无序且n较大时,不宜采用此方法。

首先是预定义和类型定义:

#define OK 1#define ERROR 0typedef int ElemType;typedef int Status;typedef struct{ElemType *data;int length;}SqList;

顺序表创建:

Status EnSqList(SqList *L, ElemType e, int n){L->data[n] = e;L->length++;return OK;}

冒泡排序算法:

void BubbleSort(SqList *L){int j, temp, flag = 1;while (flag == 1 && (L->length - 1) > 0){flag = 0;for (j = 0; j < (L->length - 1); j++){if (L->data[j]>L->data[j + 1]){flag = 1;temp = L->data[j];L->data[j] = L->data[j + 1];L->data[j + 1] = temp;}}}}

初始化flag为1表示数组无序,当数组无序并且数组长度大于1的时候,执行循环:

先领flag=0,假设数组有序,然后j从0开始判断j号元素是否比j+1号元素大,若大,则交换位置,最终使其“沉”到最后一位,并让flag为1表示数组仍然无序。

重复执行以上操作。

加入main():

int main(void){SqList L;ElemType e;int i, n;L.length = 0;printf("输入元素个数:");scanf("%d", &n);L.data = (int *)malloc(sizeof(int)*n);srand((int)time(0));for (i = 0; i < n; i++){e = rand();EnSqList(&L, e, L.length);}printf("原数组:");for (i = 0; i < L.length; i++)printf("%d ", L.data[i]);printf("\n");BubbleSort(&L);printf("排序后:");for (i = 0; i < L.length; i++)printf("%d ", L.data[i]);printf("\n");return 0;}


0 0
原创粉丝点击