/*氣泡排序:它重複地走訪過要排序的數列,一次比較兩個元素,
如果他們的順序(如從大到小、首字母從a到z)錯誤就把他們交換過來。*/
void
bubble_sort
(char str,
int n)}}
}/*選擇排序:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,
然後,再從剩餘未排序元素中繼續尋找最小(大)元素,然後放到已排序序列的末尾。*/
void
selection_sort
(int a,
int n)}if
(min != i)}}
/*插入排序:它的工作原理是通過構建有序序列,對於未排序資料,在已排序序列中從後向前掃瞄,
找到相應位置並插入。插入排序在實現上,通常採用in-place排序
(即只需用到 的額外空間的排序),
因而在從後向前掃瞄過程中,需要反覆把已排序元素逐步向後挪位,為最新元素提供插入空間。*/
void
insertion_sort
(int arr,
int len)
}/*希爾排序:也稱遞減增量排序演算法,是插入排序的一種更高效的改進版本。希爾排序是非穩定排序演算法。
希爾排序是基於插入排序的以下兩點性質而提出改進方法的:插入排序在對幾乎已經排好序的資料操作時,
效率高,即可以達到線性排序的效率;但插入排序一般來說是低效的,因為插入排序每次只能將資料移動一位*/
void
shell_sort
(int arr,
int len)
}/*歸併排序:把資料分為兩段,從兩段中逐個選最小的元素移入新資料段的末尾。可從上到下或從下到上進行。*/
//迭代法
intmin
(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
public class sortalgorithm 插入排序 param numlist private void insertsort intnumlist numlist in temp 選擇排序 private void selectionsort intnumlist system.out...
c語言幾種排序方法
1.將輸入的一串數字存入陣列中,可先用字串的形式輸入,再通過轉化成整型數存入陣列中 int len 0,tmp 0 int a maxsize char string 100 printf 請輸入任意個數的整數,以回車結束 n gets string char str string while st...
c語言排序方法彙總
先更新到這裡,之後會持續更新 三連再看,月入百萬。在接下來的排序方法中,我們都採用4 1 2 6 5 3這個數列作為我們的栗子41 2653 1124 5362 1243 5631 2345 6412 3456 5123 456氣泡排序的本質就是每次將前n i個數中的最大值換到第n i 1位上去 如...