排序算法是計(jì)算機(jī)科學(xué)中基本、常用的算法之一。本文將詳細(xì)介紹如何用C語(yǔ)言編寫(xiě)常見(jiàn)的排序算法,包括冒泡排序、選擇排序、插入排序、快速排序和歸并排序等。
1. 冒泡排序
冒泡排序是一種簡(jiǎn)單的排序算法,它重復(fù)地遍歷要排序的數(shù)列,一次比較兩個(gè)元素,如果它們的順序錯(cuò)誤就把它們交換過(guò)來(lái),直到?jīng)]有任何一對(duì)數(shù)字需要比較為止。
C語(yǔ)言實(shí)現(xiàn)
```tt){t i, j;-1; i++){-i-1; j++){
if(arr[j] >arr[j+1]){tp = arr[j];
arr[j] = arr[j+1];p;
}
}
}
2. 選擇排序
選擇排序是一種簡(jiǎn)單直觀的排序算法。它的工作原理是每一次從待排序的數(shù)據(jù)元素中選出小(或)的一個(gè)元素,存放在序列的起始位置,直到全部待排序的數(shù)據(jù)元素排完。
C語(yǔ)言實(shí)現(xiàn)
```Sorttt){tinIndex;-1; i++){inIndex = i;; j++){inIndex]){inIndex = j;
}
}tp = arr[i];inIndex];inIndexp;
}
3. 插入排序
插入排序是一種簡(jiǎn)單直觀的排序算法。它的工作原理是通過(guò)構(gòu)建有序序列,對(duì)于未排序數(shù)據(jù),在已排序序列中從后向前掃描,找到相應(yīng)位置并插入。
C語(yǔ)言實(shí)現(xiàn)
```sertionSorttt){tp;; i++){p = arr[i];
j = i - 1;p){
arr[j+1] = arr[j];
j--;
}p;
}
4. 快速排序
快速排序是一種基于交換的排序算法,通過(guò)一趟排序?qū)⒁判虻臄?shù)據(jù)分割成獨(dú)立的兩部分,其中一部分的所有數(shù)據(jù)都比另外一部分的所有數(shù)據(jù)都要小,然后再按此方法對(duì)這兩部分?jǐn)?shù)據(jù)分別進(jìn)行快速排序,整個(gè)排序過(guò)程可以遞歸進(jìn)行,以此達(dá)到整個(gè)數(shù)據(jù)變成有序序列。
C語(yǔ)言實(shí)現(xiàn)
```ttt right){
if(left< right){t i = left, j = right, pivot = arr[left];
while(i< j){
while(i< j && arr[j] >= pivot){
j--;
}
if(i< j){
arr[i++] = arr[j];
}
while(i< j && arr[i]< pivot){
i++;
}
if(i< j){
arr[j--] = arr[i];
}
}
arr[i] = pivot;
quickSort(arr, left, i-1);
quickSort(arr, i+1,
}
5. 歸并排序
歸并排序是采用分治法的一個(gè)非常典型的應(yīng)用。歸并排序的思想就是先遞歸分解數(shù)組,再合并數(shù)組。
C語(yǔ)言實(shí)現(xiàn)
```ergetttidt right){t i, j, k;t1id - left + 1;t2id;t12];1; i++){
L[i] = arr[left + i];
}2; j++){id + 1 + j];
}
i = 0;
j = 0;
k = left;12){
if(L[i]<= R[j]){
arr[k] = L[i];
i++;
}else{
arr[k] = R[j];
j++;
}
k++;
}1){
arr[k] = L[i];
i++;
k++;
}2){
arr[k] = R[j];
j++;
k++;
}
}ergeSortttt right){
if(left< right){tid = left + (right - left) / 2;ergeSortid);ergeSortid+1, ergeid,
}
以上就是常見(jiàn)排序算法的C語(yǔ)言實(shí)現(xiàn),每種算法都有其特點(diǎn),應(yīng)根據(jù)具體情況選擇合適的算法。在實(shí)際應(yīng)用中,還可以對(duì)算法進(jìn)行優(yōu)化以提高效率。