假定由小到大排。
1、思想:
分解:二分為左右兩部分;
遞迴地對兩邊歸併:對左邊歸併,對右邊歸併
合併:合併左右為乙個。
2、code:
輸入:6
60 90 50 30 20 40
輸出:20 30 40 50 60 90
#include
#include
using
namespace std;
//合併v[low...mid]和v[mid+1...high]
void
merge
(vector<
int>
&v,int low,
int mid,
int high)
else
p3++;}
while
(p1<= mid)
while
(p2<=high)
//把temp賦值到原陣列裡的對應區域 別忘記
for(
int i=
0; i<
(int
)(high-low+1)
;++i)
}void
mergesort
(vector<
int>
&v,int low,
int high)
intmain()
int len=
(int
)v.size()
;int low=
0, high=len-1;
mergesort
(v, low, high)
;for
(auto num: v)
cout
}
假定由小到大排。
輸入:6
60 90 50 30 20 40
輸出:20 30 40 50 60 90
1、思想:
每一趟排序前定乙個樞軸;
一趟排序下來,比樞軸小的在其左邊,比樞軸大的在其右邊;
遞迴快排左邊部分,遞迴快排右邊部分。
具體每一躺怎麼排?
雙指標,逆向掃瞄,正向掃瞄。
逆向掃瞄:當前數一直大於樞軸就繼續掃瞄,不大於了跳出。同時將該小數放到左邊去。
逆向掃瞄:當前數一直小於樞軸就繼續掃瞄,不小於了跳出。同時將該大數放到右邊去。
重複上述過程,直到正向逆向掃瞄相遇,終止(掃瞄完了)。
2、code:
#include
#include
using
namespace std;
intpartition
(vector<
int>
&v,int low,
int high)
//樞軸落地
v[low]
= pivot;
//or v[high]=pivot;
return low;
}void
quicksort
(vector<
int>
&v,int low,
int high)
}int
main()
int len=
(int
)v.size()
;int low=
0, high=len-1;
quicksort
(v, low, high)
;for
(auto num: v)
cout
}
快速排序 歸併排序
感覺好久之前不寫這些基礎的東西忽然覺著,想複習一下,就簡單溫習一下排序的例子 package com.ruishenh.algoritmic public class sort static void printmsg int arrs system.out.println static int g...
快速排序,歸併排序
快速排序 quicksort 是對 氣泡排序的一種改進。設要排序的 陣列是a 0 a n 1 首先任意選取乙個資料 通常選用陣列的第乙個數 作為關鍵資料,然後將所有比它小的數都放到它前面,所有比它大的數都放到它後面,這個過程稱為一趟快速排序。需要注意的是,多個相同的值的相對位置也許會在演算法結束時產...
歸併排序,快速排序
快速排序實現 filename fastsort description author hcq createtime 2019 04 12 10 01 public class fastsort arrays.stream arr foreach v system.out.println 排序後 s...