二分查詢
二分查詢又稱為折半查詢,這種查詢方法查詢速度快,但是要求線性表必須採用順序儲存結構。
下面就以十個整數陣列中查詢關鍵數字,並且輸出其所在陣列的下標。(假設這個陣列中關鍵字只出現過一次)完整**如下:
#include
intmain()
}return0;
}//二分查詢的實現,先確定每次陣列的最高處下標和最低處下標,把關鍵數與兩者中間值下標進行比較,確定新的low和high值
//二分查詢演算法結束的條件是,low大於high
注意二分查詢中有一步是mid=(low+high)/2;這種運算方式如果是在非常的陣列中使用,會導致設定的int型mid值溢位而導致程式執行失敗,使用mid=low+(high-low)/2;就可盡可能避開這樣的問題。文章舉的例子非常特殊,真正使用還需要更多的考慮。
冒泡法排序
冒泡法排序名字的由來是因為越大的元素會經由交換慢慢「浮」到數列的頂端(公升序或降序排列),就如同碳酸飲料中二氧化碳的氣泡最終會上浮到頂端一樣。
冒泡法的實現就是從簡單的兩個數字組合開始進行公升序或者降序排序,然後不斷加上陣列的後一位數字,再對新產生的陣列重新進行一次排序,一次類推。
#include
intmain()
//冒泡法公升序排序
;int i,j,t;
for(i=
0;i<
10;i++
)for
(j=0
;j<
9-i;j++)}
for(i=
0;i<=
10;i++
)printf
("%d "
,a[i]);
return0;
}
快速排序 《快排》#include
int a[10]
;//把陣列作為全域性變數
void
sort
(int l,
int r)
}while
(j<=i)
;//當左右兩邊的指向重合的時候結束迴圈
if(jsort
(j,r)
;//對關鍵數字的左邊數列進行排序
if(i>l)
sort
(l,i)
;//對關鍵數字的右邊數列進行排序
}int
main()
選擇排序
選擇法排序有點類似於冒泡法排序,都是進行了n-1次排序。先初始最小值下標位置,通過選擇陣列內最小或者最大的數來進行交換,最終實現公升序或降序排序。
#include
intmain()
//選擇法排序的公升序排序
; n=
sizeof
(a)/
sizeof
(a[0])
;//計算陣列的長度
for(i=
0;i1;i++
)//外迴圈
if(min!=i)
//判斷i和最小值的下標是否相同 ,不同則交換兩個數
}for
(i=0
;i<
10;i++
)printf
("%d "
,a[i]);
return0;
}
歸併法排序
歸併法排序是分治思想的典範,首先將n個元素分為含n/2個元素的子串行,使用歸併排序法實現子串行的遞迴排序,可以把整個原序列分為n個子序列,最後合併兩個排好序的序列。
#include
#include
void
merge
(int a,
int low,
int mid,
int high)
else
}//判斷左右兩側資料是否有剩餘,如果有,則直接複製貼上在排列好的陣列後面
if(left_low<=left_high)
//左邊序列有剩餘
if(right_low<=right_high)
//右邊序列有剩餘
for(i=
0;i1;i++
)//把排序好的序列重新放回原陣列中
a[low+i]
=tmp[i]
;free
(tmp)
;return;}
void
mergesort
(int a,
unsigned
int first,
unsigned
int last)
return;}
intmain()
;mergesort
(a,0,9
);for(i=
0;i<
10;i++
)printf
("%d "
,a[i]);
return0;
}
scala實現快排,歸併,冒泡,二分查詢
快速排序使用分治的思想,選定乙個基準點,通過一趟排序將待排序的序列分為左右兩個部分,其中左邊的部分都比基準點要小,右邊的基準點都比基準點要大,之後在分別對左右兩邊的部分,按照相同的思想繼續切分,最終達到乙個有序佇列的目的 時間複雜度 o nlog n 空間複雜度 o log n def quicks...
快排和二分查詢
我只是課本的搬運工,做做筆記,當練打字也可以。這裡我把qsort放前面講是因為bsearch在使用之前需要對陣列進行排序,排完後才能進行查詢。老師說學了快排之後就不要用氣泡排序法和選擇排序法了,然而我選擇排序還不太會,找個時間整理整理吧。快速排序 qsort函式 標頭檔案 或 功能 對具有num個元...
陣列的高階操作 二分 冒泡 快排
二分查詢也叫折半查詢,每次去掉一半的查詢範圍,從而提高查詢效率 陣列元素必須按照從小到大或者從大到小的順序排列 定義兩個變數,預設最小值變數min 0,最大值變數max 最大索引,該範圍是要查詢的範圍 迴圈查詢,但min max 計算出中間值mid max min 2 判斷mid位置是否為要查詢元素...