c語言各種排序加標註

2021-09-08 13:51:36 字數 3309 閱讀 9003

大佬莫看

1.氣泡排序(英語:bubble sort)是一種簡單的排序演算法。它重複地走 訪過要排序的數列,一次比較兩個元素,如果他們的順序(如從大到小、首字母從a到z)錯誤就把他們交換過來。

1、比較相鄰的元素。如果第乙個比第二個大(小),就交換他們兩個。

2、對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。這步做完後,最後的元素會是最大(小)的數。

3、針對所有的元素重複以上的步驟,除了最後已經選出的元素(有序)。

4、持續每次對越來越少的元素(無序元素)重複上面的步驟,直到沒有任何一對數字需要比較,則序列最終有序。

#include

//標頭檔案

void

dayin

(int

*a,int len)

;//列印函式宣告

void

maopao

(int

*a,int len)

;//氣泡排序宣告

intmain

(int argc,

char

const

*ar**)

//函式入口

;int len=

sizeof

(a)/

sizeof

(int);

int i;

maopao

(a,len)

;//冒泡函式呼叫

dayin

(a,len)

;//列印函式呼叫

}void

maopao

(int

*a,int len)

//冒泡函式實現}}

}void

dayin

(int

*a,int len)

//列印函式實現

執行結果

./a.out

123445578

void

select_sort

(int

*a,int n)

}}

上邊**的乙個模組化,複習一下函式呼叫

void

swap

(int

*a,int

*b)//交換兩個整數

void

selection_sort

(int arr,

int len)

}

插入排序(英語:insertion sort)是一種簡單直觀的排序演算法。它的工作原理是通過構建有序序列,對於未排序資料,在已排序序列中從後向前掃瞄,找到相應位置並插入。插入排序在實現上,通常採用in-place排序(即只需用到 的額外空間的排序),因而在從後向前掃瞄過程中,需要反覆把已排序元素逐步向後

挪位,為最新元素提供插入空間。

void

insertion_sort

(int arr,

int len)

}

希爾排序

希爾排序,也稱遞減增量排序演算法,是插入排序的一種更高效的改進版本。希爾排序是非穩定排序演算法。

希爾排序是基於插入排序的以下兩點性質而提出改進方法的:

插入排序在對幾乎已經排好序的資料操作時,效率高,即可以達到線性排序的效率

但插入排序一般來說是低效的,因為插入排序每次只能將資料移動一位

void

shell_sort

(int arr,

int len)

}

歸併排序

把資料分為兩段,從兩段中逐個選最小的元素移入新資料段的末尾。

可從上到下或從下到上進行。

int

min(

int x,

int y)

void

merge_sort

(int arr,

int len)

int* temp = a;

a = b;

b = temp;}if

(a != arr)

free

(b);

}遞迴法

void

merge_sort_recursive

(int arr,

int reg,

int start,

int end)

void

merge_sort

(int arr,

const

int len)

在區間中隨機挑選乙個元素作基準,將小於基準的元素放在基準之前,大於基準的元素放在基準之後,再分別對小數區與大數區進行排序。

過程演示:

迭代法

typedef

struct _range range;

range new_range

(int s,

int e)

void

swap

(int

*x,int

*y)void

quick_sort

(int arr,

const

int len)

}while

(left <= right);if

(range.start < right) r[p++]=

new_range

(range.start, right);if

(range.end > left) r[p++]=

new_range

(left, range.end);}

}遞迴法

void

swap

(int

*x,int

*y)void

quick_sort_recursive

(int arr,

int start,

int end)

if(arr[left]

>= arr[end]

)swap

(&arr[left]

,&arr[end]);

else

left++;if

(left)

quick_sort_recursive

(arr, start, left -1)

;quick_sort_recursive

(arr, left +

1, end);}

void

quick_sort

(int arr,

int len)

C語言各種排序思想

1 氣泡排序 如果是公升序,就是把最大的數排到末尾,末尾下標向前移動,利用相鄰數字比較大小實現把最大的數排到末尾,a j 和a j 1 比較大小,如果a j 1 大則交換。這樣兩兩交換下來,最後乙個肯定最大,最後乙個已經排好,下次迴圈不用再排,所以下標做減一操作。include include in...

C語言實現各種排序演算法

對輸入的n個數進行排序並輸出。輸入描述 輸入的第一行包括乙個整數n 1 n 100 接下來的一行包括n個整數。輸出描述 可能有多組測試資料,對於每組資料,將排序後的n個整數輸出,每個數後面都有乙個空格。每組測試資料的結果佔一行。輸入例子 4 1 4 3 2 輸出例子 1 2 3 4 ac code ...

C語言實現各種排序(1)

include 排序分為插入排序,希爾排序,氣泡排序,快速排序,選擇排序,堆排序,歸併排序,基數排序 桶排序 直接插入排序,較為簡單,思路為從第二個數開始逐個將其插入前面有序的序列中 平均時間複雜度為o n2 最快時間複雜度為o n 最壞時間複雜度為o n2 空間複雜度為o 1 void inser...