//時間複雜度 o(n*log2n)
//穩定程度: 穩定
/*確定分界點,中間位置
兩端排序
歸併,合二為一*/
#include#includeusing namespace std;
int tmp[250001];
void sort(int list, int l, int r);
int main()
clock_t start_time = clock();
sort(a,0,250000-1);
clock_t end_time = clock();
//for (int i = 0; i < 200000; i++)
// system("pause");
}void sort(int list, int l, int r)
//時間複雜度 o(n*log2n
//穩定性:不穩定
//**於分治思想
/*確定分界點
調整區間
遞迴處理兩端
演算法思想,快排是基於氣泡排序的優化,氣泡排序從一側開始進行,而快排是兩邊同時進行從而時間複雜度折半,同時包含了二分的思想在裡面*/
#include#includeusing namespace std;
void sort(int list, int l, int r);
int main()
clock_t start_time = clock();
sort(a,0,80000-1);
clock_t end_time = clock();
for (int i = 0; i < 80000; i++)
system("pause");
}void sort(int list, int l, int r)
sort(list, l, j), sort(list, j + 1, r);
}
#include#includeusing namespace std;
void sort(int list, int n);
int main()
clock_t start_time = clock();
sort(a, 10000);
clock_t end_time = clock();
for (int i = 0; i < 10000; i++)
system("pause");
}void sort(int list, int n)
}
從當前未排序的整數中找到最小的整數,將它放在已排序的整數列表的最後。
#include#includeusing namespace std;
void sort(int list, int n);
int main()
clock_t start_time = clock();
sort(a, 10000);
clock_t end_time = clock();
for (int i = 0; i < 10000; i++)
system("pause");
}void sort(int list, int n)
}swap(list[i], list[min]); //掃瞄一遍結束後,交換一次
}}
氣泡排序:
氣泡排序(bubblesort)的基本概念是:依次比較相鄰的兩個數,將小數放在前面,大數放在後面。即在第一趟:首先比較第1個和第2個數,將小數放前,大數 放後。
然後比較第2個數和第3個數,將小數放前,大數放後,如此繼續,直至比較最後兩個數,將小數放前,大數放後。至此第一趟結束,將最大的數放到了最後。
在第二趟:仍從第一對數開始比較(因為可能由於第2個數和第3個數的交換,使得第1個數不再小於第2個數),將小數放前中,大數放後,一直比較到倒數第二個數(倒數第一的位置上已經是最大的),第二趟結束,在倒數第二的位置上得到乙個新的最大數(其實在整個數列中是第二大的數)。如此下去,重複以上過程,直至最終完成排序。
選擇排序
第一次從下標為0的開始下標為0的這個數與後面的n-1個進行比較;找出最小或者最大的放在下標為0的這個位置;第二次從下標為1的開始比較;查詢剩下的最大或者最小值;放在下標為1的位置;以此類推;直到排序完成。
總結從上兩段**可以看出,它們處於同乙個數量級,即時間複雜度是相同的,都用了兩層迴圈,為o(n^2)(n:排序個數); 但是內層迴圈中,氣泡排序的互換位置的操作從概率上講要明顯多於選擇排序. 整個排序演算法,選擇排序換位操作為o(n),氣泡排序為o(n^2/2). 所以綜合來講選擇排序的時間效率要高於氣泡排序.
排序演算法 詳解歸併排序演算法
原理,首先將陣列遞迴的分解,直到達到終止條件返回,然後將分成兩段的陣列,進行比較,按從小到大的順序放在臨時陣列裡,然後將這一段排好順序的陣列複製給原來的陣列,繼續返回上一層,進行排序。直到完全完成遞迴。第二段結束了,第一段還有 if begin1 end1 第一段結束了,第二段還有 else 每次都...
排序演算法詳解 歸併排序 Merge Sort
核心思想 分治。主題流程 先將乙個序列分成很多個不能再分割的子串行,將各個子串行分別排序後再將子串行合併。其實就是重複兩個步驟 分合併。首先是第乙個小問題,怎麼分?比如說乙個序列 12 23,1,44,233,10,9,8。我們先分成兩段 12 23,1,44 和 233,10,9,8,發現還能再分...
基本排序演算法 歸併排序詳解
歸併排序的核心就是將待排序元素先不斷分割直至不可分割,然後左右合併歸一。本質上是分治和遞迴的使用。話不多說,直接上 include includeusing namespace std class solution else 迴圈結束表示某乙個走完了,剩下的直接放入尾部 while i mid wh...