C語言排序(二) 二分查詢

2021-08-13 04:35:04 字數 1653 閱讀 6208

一.實驗內容

①順序查詢演算法與二分查詢演算法比較。

a.定義兩個函式分別實現順序查詢和二分查詢演算法。

b.主函式中用產生隨機數的方式隨機產生待查資料,通過呼叫口麵編寫函式查詢指定的資料。

c.測試資料分別選擇:在1000 10000 1000001000000個數中查詢指定資料,對比兩個函式的執行時間。

d. 得出結論這兩個演算法哪個效率高。

②樸素演算法與分治演算法計算x的n次方的演算法比較。

a.定義兩個函式實現計算x的n次方的樸素演算法和分治演算法。

b.輸入x和n的值,呼叫這兩個函式計算x的n次方的結果並求這兩個函式的執行時間。

c.得出結論這兩種演算法哪個效率更高。

二.實驗**

#include#include#include#include#includeint main()

for(i=2;i<=n;i++)//利用直接排序法對隨機數組進行排序

}for(i=1;i<=n;i++)//輸出所產生的有序的陣列

printf("\n");//從以產生的有序的陣列中尋找乙個關鍵字

printf("輸入要查詢的關鍵字:");

scanf("%d",&key);

printf("進行順序查詢所迴圈的次數:");

t1=search_seq(s,n,key);

printf("%d\n",t1);

printf("進行折半查詢所迴圈的次數:");

t2=search_bin(s,n,key);

printf("%d\n",t2);

printf("\n\n\n");//換行用

printf("輸入x的值:");

scanf("%d",&x);

printf("輸入冪y的值:");

scanf("%d",&y);

t3=recur_1(x,y);

printf("%d\n",t3);

t4=******_2(x,y);

printf("%d\n",t4);

return 0;

}int search_seq(int a,int b,int c)//計算順序查詢查詢時間

return num1;//返回順序查詢所迴圈的次數

}int search_bin(int a,int b,int c)//計算折半查詢所需時間

else

}end=clock();

return difftime(end,start);//返回分治所需要的時間

}

三.實驗結果

四.實驗總結

折半查詢比順序查詢效率更高,分治遞迴演算法比樸素演算法效率更高。使用合理的排序演算法,能夠極大的提高程式的執行效率,節約時間。

演算法二 二分查詢

1 用最省記憶體的方式查詢資料。2 快速定位ip所在省市 二分每次都通過跟區間中的中間元素對比,將待查詢的區間縮小為一半,直到區間為0或者找到元素。需要重點關注退出條件 mid取值 low和high的更新。二分的時間複雜度o logn logn少的驚人之處和指數的大的驚人之處類似。2的32次方是4億...

排序二 二分查詢法優化插入排序

通俗的插排是對乙個整型陣列進行公升序排序,可以看出每個元素插入到佇列中經過兩個步驟 先是挨個比較,找到自己所在的位置 然後把後面的資料全部移位,然後把元素插入。要把資料插入,移位是必不可少了。那麼,挨個比較倒是可以優化,因為要插入的佇列已經是排序好的,我們可以使用二分法來減少比較的次數。二分法的時間...

二分查詢二(二分查詢的經典變形問題)

主要 int bsearch1 int a,int n,int value else if a mid value else return 1 這段 的處理重點就是 a mid value 時的情況,如果 mid 等於 0,即這個元素已經是陣列的第乙個元素,那毫無疑問,這個元素肯定就是我們要找的 如...