日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

基本算法研究1-冒泡排序算法测试

發布時間:2023/12/2 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基本算法研究1-冒泡排序算法测试 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

基本算法研究1-冒泡排序算法測試

1、經典冒泡排序法基本原理

先看一個動態圖,感覺比較形象:

? ? ? ? 冒泡排序(Bubble Sort)是一種簡單的排序算法。默認是從小到大排序,即把最大的數據排在最后,相當于每次把最大數據像氣泡一樣浮到水面一樣。它重復地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重復地進行直到沒有再需要交換。

? ? ? ? 基本步驟:

? ? ? ? 1、比較相鄰的元素。如果第一個比第二個大,就交換他們兩個。
? ? ? ? 2、對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最后一對。在這一點,最后的元素應該會是最大的數。
? ? ? ? 3、針對所有的元素重復以上的步驟,除了最后一個。
? ? ? ? 4、持續每次對越來越少的元素重復上面的步驟,直到沒有任何一對數字需要比較。

?

? ? ? ?最經典的冒泡排序法就是兩層For循環嵌套。外層For循環是“趟”數,內層是每一“趟”對相鄰的兩個數據進行大小比較,根據需要進行交換位置。

int a[SORT_NUM];for (int i=0; i<SORT_NUM; i++)a[i]=arc4random()%SORT_NUM+1;//隨機生成數組
for (int i=0; i<SORT_NUM; i++)//外層循環{
for (int j=0; j<SORT_NUM-i-1; j++)//內層循環{
if (a[j]>a[j+1])//交換數據{int temp=a[j];a[j]=a[j+1];a[j+1]=temp;} }}

2、冒泡排序的性能

時間復雜度:平均:O(n2) ?最好:O(n2) 最差:O(n2)

? ? ? ? 穩定:穩定的

空間復雜度:O(1)

備注:在n較小時排序效果比較好,優點是比較簡單。但是隨著n的增大,耗時增加很快。

3、實際測試結果

使用Xcode對冒泡排序進行了測試,結果如下

nn倍數第1次第2次第3次平均時間倍數使用時間(單位)
10?18.0025.0314.0119.01?微秒
1001067.9770.9943.9960.983.21微秒
1000102.071.942.082.0333.29毫秒
10 00010298.59265.01279.29280.96138.40毫秒
100 0001029.8931.1832.5131.19111.01
200 0002129.95122.60128.04126.984.07

?

基本上可以發現,隨著數據規模增加到之前的N倍,所用的時間是之前所用時間的N2倍。比如一萬數據用時是280.96毫秒,十萬數據用時是31.19秒,十萬數據用時是一萬數據用時的111.01倍(大約是102倍)。和冒泡排序法的時間復雜度O(N2)是相符的。

測試程序如下:

在Xcode下運行。

#import <Foundation/Foundation.h> #define SORT_NUM 200000 //需要排序的數組的長度 int main(int argc, const char * argv[]) { #pragma mark --startint a[SORT_NUM];printf("未排序:");for (int i=0; i<SORT_NUM; i++){//隨機生成數組a[i]=arc4random()%SORT_NUM+1;// printf(" %d",a[i]);}NSDate * startTime=[NSDate date];startTime=[startTime dateByAddingTimeInterval:60*60*8];for (int i=0; i<SORT_NUM; i++)//外層循環{for (int j=0; j<SORT_NUM-i-1; j++)//內層循環{if (a[j]>a[j+1])//交換數據{int temp=a[j];a[j]=a[j+1];a[j+1]=temp;}}}NSDate * endTime=[NSDate date];endTime=[endTime dateByAddingTimeInterval:60*60*8];NSTimeInterval sortTime=[endTime timeIntervalSinceDate:startTime];printf("\n排序后:\n");//for (int i=0; i<SORT_NUM; i++)// printf(" %d",a[i]);NSLog(@"開始時間:%@",startTime);NSLog(@"結束時間:%@",endTime);NSLog(@"使用時間:%.2f微秒",sortTime*1000000);NSLog(@"使用時間:%.2f毫秒",sortTime*1000);NSLog(@"使用時間:%.2f秒",sortTime);printf("\n冒泡排序\n");#pragma mark --endreturn 0; } 

轉載于:https://www.cnblogs.com/nathan1987/p/4839497.html

總結

以上是生活随笔為你收集整理的基本算法研究1-冒泡排序算法测试的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。