查找和排序都是程序中經(jīng)常用到的算法
成都創(chuàng)新互聯(lián)專(zhuān)注于貴州企業(yè)網(wǎng)站建設(shè),成都響應(yīng)式網(wǎng)站建設(shè)公司,商城系統(tǒng)網(wǎng)站開(kāi)發(fā)。貴州網(wǎng)站建設(shè)公司,為貴州等地區(qū)提供建站服務(wù)。全流程按需網(wǎng)站設(shè)計(jì),專(zhuān)業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,成都創(chuàng)新互聯(lián)專(zhuān)業(yè)和態(tài)度為您提供的服務(wù)一、查找
查找分為:順序查找,二分查找、哈希表查找和二叉樹(shù)排序查找。
哈希表和二叉樹(shù)查找的重點(diǎn)在于其數(shù)據(jù)結(jié)構(gòu)。哈希表的主要優(yōu)點(diǎn)是能夠在O(1)的時(shí)間查找某一元素,是效率最高的查找方式。其缺點(diǎn)是需要額外的空間來(lái)實(shí)現(xiàn)哈希表。
二、排序
排序分為插入排序,交換排序,選擇排序歸并排序等。排序的這幾種方法的優(yōu)劣(額外空間的消耗,平均時(shí)間復(fù)雜度和最差時(shí)間復(fù)雜度)、特點(diǎn)是重點(diǎn)。
1.插入排序
a.直接插入
當(dāng)給定的數(shù)據(jù)元素序列有序時(shí),關(guān)鍵字之間比較次數(shù)最少,最好的情況下時(shí)間復(fù)雜度為O(N),最差的情況下為O(N^2)
void InSertSort(int*a, int length) { for (int i = 1; i < length; i++) { int tmp = a[i]; int j = 0; for ( j = i-1; j >=0&&tmp插入排序是最穩(wěn)定的排序方法
b.折半插入
和直接插入排序過(guò)程相似,用折半的方法尋找插入位置。
void BiInsertSort(int *a, int length) { for (int i = 1; i < length; i++) { int tmp = a[i]; int left = 0; int right = i - 1; int j = 0; while (left <= right) { int mid = (left + right); if (tmp < a[mid])//折半 { right = mid - 1; } else { left = mid + 1; } } for (j = i - 1; j >= left; j--)//后移 { a[j + 1] = a[j]; } a[j + 1] = tmp; } }2.交換排序
兩兩比較,若發(fā)現(xiàn)存在逆序,則交換,一直待到元素序列沒(méi)有逆序?yàn)橹?/p>
a.冒泡排序
時(shí)間復(fù)雜度為O (n^2) 是穩(wěn)定的排序方法
void BubbleSort(int *a, int length) { for (int i = 0; i < length; i++) { for (int j = 0; j < length - i-1; j++) { if (a[j]>a[j + 1]) swap(a[j], a[j + 1]); } } }b.快速排序
1)設(shè)置兩個(gè)變量i、j,排序開(kāi)始的時(shí)候:i=0,j=N-1;
2)以第一個(gè)數(shù)組元素作為關(guān)鍵數(shù)據(jù),賦值給key,即key=A[0];
3)從j開(kāi)始向前搜索,即由后開(kāi)始向前搜索(j--),找到第一個(gè)小于key的值A(chǔ)[j],將A[j]和A[i]互換;
4)從i開(kāi)始向后搜索,即由前開(kāi)始向后搜索(i++),找到第一個(gè)大于key的A[i],將A[i]和A[j]互換;
5)重復(fù)第3、4步,直到i=j; (3,4步中,沒(méi)找到符合條件的值,即3中A[j]不小于key,4中A[i]不大于key的時(shí)候改變j、i的值,使得j=j-1,i=i+1,直至找到為止。找到符合條件的值,進(jìn)行交換的時(shí)候i, j指針位置不變。另外,i==j這一過(guò)程一定正好是i+或j-完成的時(shí)候,此時(shí)令循環(huán)結(jié)束)。
int Partition(int *a, int i, int j) { int base = a[i]; while (i < j) { //從右往左掃描 while (base < a[j] && ia[j] { swap(a[i], a[j]); i++; } //從左往右掃描 while (i a[i]) i++; if (i 3.選擇排序
a.直接選擇排序
b.堆排序
快速排序
快速排序關(guān)鍵在于先在數(shù)組中選擇一個(gè)數(shù)字,接下來(lái)吧數(shù)組中的數(shù)字分為兩部分,比選擇數(shù)組小的放到左邊,大的放到右邊。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線(xiàn),公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性?xún)r(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專(zhuān)為企業(yè)上云打造定制,能夠滿(mǎn)足用戶(hù)豐富、多元化的應(yīng)用場(chǎng)景需求。
本文標(biāo)題:查找與排序-創(chuàng)新互聯(lián)
分享地址:http://weahome.cn/article/jgoco.html