起泡排序的运行时间
程序代码:
#include<stdio.h> #include<time.h> #include<stdlib.h> #include<iostream> using namespace std; typedef struct {int key; }rectype; void bubblesort(rectype r[],int n){ int i,j,noswap; rectype temp; for(i=0;i<=n-2;i++) {noswap=true; for(j=n-2;j>=i;j--) if(r[j+1].key<r[j].key) {temp=r[j+1]; r[j+1]=r[j]; r[j]=temp; noswap=false; } if(noswap) break; } } void insertsort(rectype r[],int n) {int i,j,m; for(i=2;i<n;i++) { r[0]=r[i]; j=i-1; while(r[0].key<r[j].key) r[j+1]=r[j--]; r[j+1]=r[0]; } } int main(){ {rectype a[100000]; int i,t,n=100000; clock_t start, finish,start1,finish1; double value,duration; srand(time(0)); for(i=0;i<100000;i++) {t=rand()%100000+1; a[i].key=t;} start=clock(); insertsort(a,n); finish=clock(); value= (double)(finish - start) / CLOCKS_PER_SEC; cout<<value<<endl; start1=clock(); bubblesort(a,n); finish1=clock(); duration=(double)(finish1-start1)/ CLOCKS_PER_SEC; cout<<duration<<endl; getchar(); } } 写的乱了点,运行了4次程序发现直接选择排序的运行时间在11秒3左右,冒泡排序的时间从7秒多到19秒多不等,这两个排序的平均时间复杂度都是O(n²),为什么冒泡排序的时间变化这么大呢,是不是程序有舍呢么问题呢,求高手指点