氣泡排序(英語:bubble sort)是一種簡單的排序演算法。它重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個演算法的名字由來是因為越小的元素會經由交換慢慢「浮」到數列的頂端。
時間複雜度o(n2)
void bubble_sort(int *array,int插入排序(len)
}
}}
英語:insertion sort)是一種簡單直觀的排序演算法。它的工作原理是通過構建有序序列,對於未排序資料,在已排序序列中從後向前掃瞄,找到相應位置並插入。
時間複雜度o(n2)
/*歸併排序* 從第乙個元素開始,該元素可以認為已經被排序
* 取出下乙個元素,在已經排序的元素序列中從後向前掃瞄
* 如果該元素(已排序)大於新元素,將該元素移到下一位置
* 重複步驟3,直到找到已排序的元素小於或者等於新元素的位置
* 將新元素插入到該位置後
* 最優的時間o(n)
* 最壞的時間o(n2)
* 平均的時間o(n2) */
void insert_sort(int *array,int
len)
}
是利用歸併的思想實現的排序方法,該演算法採用經典的分治(divide-and-conquer)策略(分治法將問題分(divide)成一些小的問題然後遞迴求解,而治(conquer)的階段則將分的階段得到的各答案"修補"在一起,即分而治之)。
分治圖:
兩個有序陣列合併的具體過程:
時間複雜度o(n * log2(n))
/*二叉堆排序分解:將n個元素分成各含n/2個元素的子串行
* 解決:用合併排序法對兩個子串行遞迴地排序
* 合併:合併兩個已排序的子串行以得到排序結果
* 時間複雜度o(n*log2(n)) */
void
merge_sort_recursive(
int arr, int reg, int left, int
right)
void merge_sort(int arr, const
intlen)
static快速排序void swap(int *a,int *b)
/**假設"第乙個元素"在陣列中的索引為 0 的話,則父節點和子節點的位置關係如下:
*(01) 索引為i的左孩子的索引是 (2*i+1);
*(02) 索引為i的左孩子的索引是 (2*i+2);
*(03) 索引為i的父結點的索引是 floor((i-1)/2); */
/*自上而下
*/void max_heapify(int array, int start, int
end)
}}void heap_sort(int array,int
len)
}
staticvoid swap(int *a,int *b)
static
int median3(int *array,int left,int
right)
static
void quick_array(int *array,int left,int
right)
swap(&array[i],&array[right-1
]); quick_array(array,left,i-1
); quick_array(array,i+1
,right);
}else
}}void quick_sort(int *array,int
len)
常見的排序演算法
一 氣泡排序 include include void swap int a,int b void bubblesort int arr,int size int main void bubblesort a,5 for int i 0 i 5 i cout 二 選擇排序 void selectio...
常見的排序演算法
需要包含的標頭檔案 include stdafx.h include include include 氣泡排序是穩定排序 時間複雜度 o n 2 void swap int a,int b void bubblesort int a,int n void printnum int a,int n a...
常見的排序演算法
排序演算法是最基礎,也是最簡單的演算法思想,因為應用場景多,書寫簡單,所以應用較為普遍,所以在面試和考試的時候,都會涉及到排序演算法,雖然排序演算法種類很多,但是只要理解了思想,然後靈活運用,那麼就不難記憶.排序演算法兩個需要記憶和理解的點就是 演算法思想和時間複雜度.下面我們就介紹和分析一下常見的...