C語言:實現字串的逆置。
C排序演算法彙總
1.氣泡排序(最重要,最常用)
氣泡排序(BubbleSort)是一種簡單的排序演算法。它重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序(如從大到小、首字母從A到Z)錯誤就把他們交換過來,最終大的在後面,也就是重的在下面,輕的飄上面。
過程演示:
例項
#include <stdio.h>
void bubble_sort(int arr[], int len) {
int i, j, temp;
for (i = 0; i < len - 1; i++)
for (j = 0; j < len - 1 - i; j++)
if (arr[j] > arr[j + 1])
{
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
int main()
{
int arr[] = { 22, 34, 3, 32, 82, 55, 89, 50, 37, 5, 64, 35, 9, 70 };
int len = (int) sizeof(arr) / sizeof(*arr); //也可以有其他的表達方法,這個你可以理解理解
bubble_sort(arr, len);
int i;
for (i = 0; i < len; i++)
printf("%d ", arr[i]);
return 0;
}
2.選擇排序(較常用)
選擇排序(Selection sort)是一種簡單直觀的排序演算法。它的工作原理如下:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然後,再從剩餘未排序元素中繼續尋找最小(大)元素,然後放到已排序序列的末尾。以此類推,直到所有元素均排序完畢。
過程演示:
例項
void selection_sort(int a[], int len)
{
int i,j,temp;
for (i = 0 ; i < len - 1 ; i++)
{
int min = i; // 記錄最小值,第一個元素預設最小
for (j = i + 1; j < len; j++) // 訪問未排序的元素
if (a[j] < a[min]) // 找到目前最小值
min = j; // 記錄最小值
if(min != i)
{
temp=a[min]; // 交換兩個變數
a[min]=a[i];
a[i]=temp;
}
}
}
*******************備註*******************
氣泡排序是一種穩定的排序方式!
選擇排序是一種不穩定的排序方式!
所謂穩定,就是指排完序後序列的各個元素的下標不會改變。
如:氣泡排序
for (int i = 1;i <= n - 1;i ++)
for (int j = 1;j <= n - i;j ++)
if(a[j] > a[j + 1])
swap(a[j],a[j + 1]);
第零趟:2,3,2,1
第一趟:2 2 1 32:2 1 2 3
3: 1 2 2 3
排完之後,加粗的2還在前面。
所謂不穩定,恰恰相反,
如:選擇排序
for (int i = 1;i <= n - 1;i ++)
for (int j = i + 1;j <= n;j ++)
if(a[i] > a[j])
swap(a[i],a[j]);
第零趟:2 3 2 1
第一趟:1 3 2 2
第二趟:1 2 3 2
3:1 2 2 3
排完之後,加粗的2到後面去了。
穩定性非常重要!所以你記住死死冒泡法就十分OK!!!
3.插入排序
插入排序(Insertion Sort)是一種簡單直觀的排序演算法。它的工作原理是通過構建有序序列,對於未排序資料,在已排序序列中從後向前掃描,找到相應位置並插入。插入排序在從後向前掃描過程中,需要反覆把已排序元素逐步向後挪位,為最新元素提供插入空間。
過程演示:
例項
void insertion_sort(int arr[], int len)
{
int i,j,temp;
for (i=1;i<len;i++)
{
temp = arr[i];
for (j=i;j>0 && arr[j-1]>temp;j--)
arr[j] = arr[j-1];
arr[j] = temp;
}
}
4.其他排序
(思路相對複雜,不再展示)
1.希爾排序
希爾排序,也稱遞減增量排序演算法,是插入排序的一種更高效的改進版本。
希爾排序是非穩定排序演算法。
希爾排序縮小遞增量必須是要互質的。
希爾排序是基於插入排序的以下兩點性質而提出改進方法的:插入排序在對幾乎已經排好序的資料操作時,效率高,即可以達到線性排序的效率 但插入排序一般來說是低效的,因為插入排序每次只能將資料移動一位。
2.歸併排序
把資料分為兩段,從兩段中逐個選最小的元素移入新資料段的末尾,可從上到下或從下到上進行。
3.迭代法
4.遞迴法
5.快速排序
在區間中隨機挑選一個元素作基準,將小於基準的元素放在基準之前,大於基準的元素放在基準之後,再分別對小數區與大數區進行排序,快速排序可以不用交換中間值。
友情連結:
菜鳥學C
曾經發表:
HAUTOJ