#include <stdlib.h> #include <time.h> #include <stdio.h> typedef int ElemType; //定义 动态顺序表 结构体类型 typedef struct { ElemType *elem; int length; }DSTable; //初始化 动态顺序表 void Init_DSTable(DSTable &L,int len){ L.length=len; L.elem=(ElemType*)malloc(sizeof (ElemType)*L.length); //随机数生成 int i; srand(time((NULL))); for(i=0;i<L.length;i++){ L.elem[i]=rand()%100; } } //冒泡排序 void swap(ElemType &a,ElemType &b){ ElemType temp; temp=a; a=b; b=temp; } void BubbleSort(DSTable L){ int i,j; //哨兵 bool flag; for (i = 0; i <L.length-1; ++i) { flag = false; for(j=L.length-1;j>i;j--){ if(L.elem[j]<L.elem[j-1]){ swap(L.elem[j],L.elem[j-1]); flag = true; } } //注意判断哨兵在外层循环中;表示 如果在某一轮前移动最小元素时,没有交换元素,此时循序表已然有序 if(false==flag){ return; } } } //打印顺序表 void Print_DSTable(DSTable L){ int i; for(i=0;i<L.length;i++){ printf("%3d",L.elem[i]); } printf("\n"); } int main(){ DSTable L;//声明动态顺序表 Init_DSTable(L,10); Print_DSTable(L); BubbleSort(L); Print_DSTable(L); return 0; }
时间复杂度:
最坏 和 平均 :T(n)=n^2
最好:T(n)=n(带哨兵的作用)