冒泡排序法是語言學(xué)習(xí)中最基礎(chǔ)的排序方法,基本上每個學(xué)習(xí)的人都會遇到這個算法。
冒泡的核心就在于相鄰元素的連續(xù)比較換序,多次相鄰元素比較稱為一輪冒泡,每一輪冒泡都能確定一個元素的正確排序位置,用多輪冒泡進(jìn)而完成整體排序。
void bubble_sort(int* arr, int sz)
{int i = 0;
//如果我們arr數(shù)組中有5個數(shù),我們只需要比較4輪(只剩下一個數(shù)的時候不需要比較)
//sz就是記錄多少個數(shù),i是從0開始循環(huán),因此這里需要i< sz - 1
for (i = 0; i< sz - 1; i++)
{int j = 0;
//第一輪比較是從arr[0]兩兩比較到arr[sz - 1],確定出arr[sz - 1]位置的元素
//第二輪比較是從arr[0]到arr[sz - 2],確定出arr[sz - 2]位置的元素
//一直做下去,直到只剩下一個數(shù),即可確定所有排序
for (j = 0; j< sz - i - 1; j++)
{ //每進(jìn)入一次內(nèi)層for循環(huán)就是兩兩比較一次
//此時的if條件是為了得到一個升序排列
if (arr[j] >arr[j + 1])
{ int tmp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tmp;
}
}
}
}
int main()
{int arr[] = {1,-2,6,3,2,33,11,312,1,0,-3 };
int sz = sizeof(arr) / sizeof(arr[0]);
bubble_sort(arr, sz);
return 0;
}
思考上述代碼的局限性還是存在,當(dāng)我們想要比較其他數(shù)據(jù)類型的數(shù)組元素時,需要進(jìn)行大量修改,因此最基礎(chǔ)的改進(jìn)方法就是將元素類型進(jìn)行重定義(typedef)
typedef 的本質(zhì)就是給某種數(shù)據(jù)類型取一個別名,當(dāng)我們需要大量修改代碼中的數(shù)據(jù)類型時(例如這里的int),如果使用了typedef,我們就只需要對typedef中重定義的數(shù)據(jù)類型(int)進(jìn)行修改,這樣能夠簡化代碼,方便調(diào)試修改
typedef int bubble_type;
void bubble_sort(bubble_type* arr, int sz)
{int i = 0;
for (i = 0; i< sz - 1; i++)
{int j = 0;
for (j = 0; j< sz - i - 1; j++)
{ if (arr[j] >arr[j + 1])
{ bubble_type tmp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tmp;
}
}
}
}
但是,此種方式在每次使用之前還需要修改重定義中的數(shù)據(jù)類型,還是不夠通用,那么我們就需要用到一個知識:函數(shù)指針與函數(shù)回調(diào)機(jī)制,借助qsort函數(shù)的思想進(jìn)行bubble_sort的進(jìn)一步改進(jìn),這是以后的內(nèi)容了,大家有興趣可以提前進(jìn)行了解學(xué)習(xí)。
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧