冒泡法:我觉得重点在于两两比较相邻记录的关键字。
冒泡法的定义:两两比较相邻记录的关键字,如果反序,就交换,直到没有反序为止。
时间复杂度:最好的情况下,也就是表就是顺序的,也就是只要比较n-1次,O(n);
最坏的情况下,刚好逆序,也就是要比较(n-1)+(n-2)+...+1=n(n-1)/2,为O(n2)。因此总的时间复杂度为O(n2)。
#include<iostream> using namespace std; #define M 10 void swap(int *a, int m, int n) { int temp; temp = a[m]; a[m] = a[n]; a[n] = temp; } void Bubblesort(int *a,int length) { int i,j; for(i=0;i<length-1;i++) { for(j=length-2;j>=i;j--) { if(a[j]>a[j+1]) { swap(a,j,j+1); } } } } void Bubblesort2(int *a,int length) { int i,j; typedef int status; status flag = true; for(i=0;(i<length-1)&&flag;i++) { flag = false; for(j=length-2;j>=i;j--) { if(a[j]>a[j+1]) { swap(a,j,j+1); flag = true; } } } } int main() { int r[M]; for(int i=0;i<M;i++) { r[i] = rand() % M; } for(int i=0;i<M;i++) { cout<<r[i]<<'\t'; } cout<<endl; Bubblesort2(r,M); for(int i=0;i<M;i++) { cout<<r[i]<<'\t'; } return 0; }