C語言筆記 13 排序演算法

2022-04-02 22:03:44 字數 2858 閱讀 2618

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

過程演示:

// 得到arr總佔多少位,再得到每乙個佔多少位,強制轉換為int型別

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;

}選擇排序(selection sort)是一種簡單直觀的排序演算法。它的工作原理如下。首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然後,再從剩餘未排序元素中繼續尋找最小(大)元素,然後放到已排序序列的末尾。以此類推,直到所有元素均排序完畢。

過程演示:

void swap(int *a,int *b) //交換兩個變數

void selection_sort(int arr, int len)

}

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

過程演示:

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

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

過程演示:

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

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

過程演示:

迭代法

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)

參考自:

演算法題13 排序演算法(更新快排)

1 快速排序 這篇部落格介紹的非常清晰易懂了。主要就是挖坑,填坑 分治法策略。筆者這裡就只貼出 來 1 void quicksortcore int arr,int start,int end 213 填i的坑,等於挖了j的元素到i,需要乙個比x大的數來填j的坑 14if i1518 19 從前向後...

演算法筆記2 排序

1.選擇排序 首先,找到陣列中最小的那個元素,其次,將他和陣列第乙個元素交換位置,再次,在剩下的元素中找到最小的元素,將他和陣列的第二個元素交換位置。如此反覆,直到將整個陣列排序。不斷的選擇剩餘元素的最小值 2.插入排序 對部分有序陣列很有效 為了給要插入的元素騰出空間,我們需要將其餘所有元素在插入...

演算法筆記02 排序演算法

1.歸併排序 歸併排序將整體陣列不斷分成更小的陣列,最終結果是所有陣列中只含有乙個元素,然後兩兩不斷合併。時間複雜度為o nlogn 比如現在有陣列 第一次劃分,第二次劃分,第三次劃分,開始兩兩合併排序 第一次合併,第二次合併,第三次合併,歸併排序中有著遞迴的思想,不斷將陣列劃分成更小的陣列,在這種...