1. 程式人生 > 其它 >C語言:實現字串的逆置。

C語言:實現字串的逆置。

技術標籤:HAUTOJ排序演算法插入排序演算法

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 3

2: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