大佬莫看
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...