氣泡排序(英語: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 比如現在有陣列 第一次劃分,第二次劃分,第三次劃分,開始兩兩合併排序 第一次合併,第二次合併,第三次合併,歸併排序中有著遞迴的思想,不斷將陣列劃分成更小的陣列,在這種...