當(dāng)前位置:首頁(yè) > 嵌入式培訓(xùn) > 嵌入式學(xué)習(xí) > 學(xué)習(xí)筆記 > 嵌入式學(xué)習(xí)筆記:數(shù)據(jù)結(jié)構(gòu)與算法之哈希表和快速排序詳解
1. 查找算法:hash(散列表)
定義:將查找的記錄健值key和記錄的存儲(chǔ)位置通過(guò)一定的映射關(guān)聯(lián)起來(lái)。通過(guò)健值和散列函數(shù)求出散列地址(記錄的保存地址),在該出進(jìn)行查找
問(wèn)題:構(gòu)建的散列表存在一定的沖突
解決辦法:
開(kāi)放地址法:將發(fā)生沖突的記錄存儲(chǔ)在開(kāi)放地址中(從當(dāng)前位置開(kāi)始查找空閑的散列地址)
鏈接法:將不同健值對(duì)應(yīng)相同的散列地址的記錄通過(guò)指針鏈接起來(lái)。HASH查找
指針數(shù)組 + 鏈表序列
2. 排序算法: 遞歸排序
數(shù)據(jù)分割:將數(shù)據(jù)通過(guò)基準(zhǔn)分割成兩個(gè)序列,左側(cè)比基準(zhǔn)小,右側(cè)比基準(zhǔn)大。
遞歸排序:將分割好的左右序列再進(jìn)行分割,從而達(dá)到排序的效果
Void Quichsort(arr,low,high)
{
Int i=low , j=high; base=a[i];
While( i< j) //遍歷整個(gè)數(shù)序列
{
//從右向左查找第一個(gè)比base小的值,并移位置 While(a[j]>=base && i< j)
j--;
a[i]=a[j];
//從左向右查找第一個(gè)比base大的值,并移位置
while(a[i]<=base && i < j)
i++;
a[j]=a[i];
}
a[i]=base; //最終分割位置插入
quicksort(arr, low,i-1); //左分支遞歸
quicksort(arr,i+1,high); //右分支遞歸
}