// 11類常用演算法**實現
//#include
#include
using
namespace std;
//1.直接插入排序 o(n^2)
template
<
class
t>
void
insert
(vector
* a)
(*a)
[j +1]
= tmp;}}
}//2.折半插入排序
template
<
class
t>
void
binsert
(vector
* a)
// 有序表中插入位置後的元素都後移一步
for(
int j = i; j > low; j--)(
*a)[j]=(
*a)[j -1]
;(*a)[low]
= tmp;}}
}//3. 2路插入排序
template
<
class
t>
void
insert2
(vector
* a)
elseif(
(*a)
[i]> d[end]
)else
d[(k + n)
% n]=(
*a)[i]
; end =
(end +
1+ n)
% n;}}
for(
int i =
0; i < n; i++)}
template
<
class
t>
void
printans
(vector a)
template
<
class
t>
void
swap
(t* a, t* b)
//4.氣泡排序
template
<
class
t>
void
bubble
(vector
* a)}if
(flag)
break;}
}// 分割操作
template
<
class
t>
intpartition
(vector
* a,
int low,
int high)
swap(&
(*a)
[low],&
(*a)
[high]);
while
(low < high &&
(*a)
[low]
<= pivot)
swap(&
(*a)
[low],&
(*a)
[high]);
}return low;
}template
<
class
t>
void
qsort
(vector
* a,
int low,
int high)
}//6.快排
template
<
class
t>
void
qsort
(vector
* a)
//找最小值所在下標
template
<
class
t>
intminidx
(vector
* a,
int idx)
return min;
}//7.選擇排序
template
<
class
t>
void
selectsort
(vector
* a)
}template
<
class
t>
intselectmin
(vector
*a, vector<
int> record)
int n = record.
size()
; vector<
int> halfrecord;
n = n /2;
int tmp;
for(
int i =
0; i < n; i++
) halfrecord.
push_back
(tmp);}
if(record.
size()
%2==1
)return
selectmin
(a, halfrecord);}
// 8.樹型選擇排序
template
<
class
t>
void
treesort
(vector
* a)
for(
int i =
0; i <
(*a)
.size()
; i++)}
template
<
class
t>
void
adjust
(vector
* a,
int s,
int n)
(*a)
[s]= rc;
}//9.堆排序
template
<
class
t>
void
heapsort
(vector
* a)
//調整剩餘元素構建乙個新堆
for(
int i =
(*a)
.size()
-1; i >=
0; i--)}
//10.歸併排序
template
<
class
t>
void
mergesort
(vector
* a,
int lo,
int hi,
int mid)
i = lo;
// 左半邊
j = mid +1;
// 右半邊
for(k = lo; k <= hi; k++
)else
if(j > hi)
// 只有左半邊有用
else
if(tmp[i - lo]
> tmp[j - lo]
)// 右邊更小
else
// 左邊更小}}
template
<
class
t>
void
mergesort
(vector
* a,
int lo,
int hi)
template
<
class
t>
void
mergesort
(vector
* a)
//11.基數排序
template
<
class
t>
void
distruib
(vector
* a,
int digit)
// 分配和收集演算法
int idx =0;
for(
auto vec : tmp)}}
template
<
class
t>
intmaxdigit
(vector
* a)
// 最大位數
int ret =0;
while
(maxelem >0)
return ret;
}template
<
class
t>
void
radixsort
(vector
* a)
return;}
intmain()
; vector<
int> arrdirinser
;//1.
//insert(&arrdirinser);
//binsert(&arrdirinser);
//insert2(&arrdirinser);
//bubble(&arrdirinser);
//qsort(&arrdirinser);
//selectsort(&arrdirinser);
//treesort(&arrdirinser);
//heapsort(&arrdirinser);
//mergesort(&arrdirinser);
radixsort
(&arrdirinser)
;printans
(arrdirinser)
; std::cout <<
"hello world!\n"
;}
常用排序演算法總結
總結些常見的排序演算法,方便以後可以重用。資料量不大,為了表達方便就直接使用了陣列。int data null data new int 1.氣泡排序 氣泡排序,從小到大排序 for int i 0 i data.length i 氣泡排序就是說,排序的過程像水裡往上冒的氣泡一樣,每個數字代表乙個氣...
常用排序演算法總結
常用排序演算法總結 選擇排序 對於長度為n的陣列,選擇排序需要大約n2 2詞比較和n次交換。插入排序 對於隨機排列的長度為n且主鍵不重複的陣列 1 平均情況下,需要 n2 4次比較以及 n2 4次交換。2 最壞情況下,需要 n2 2次比較以及 n2 2次交換 3 最好情況下,需要n 1次比較以及0次...
常用排序演算法總結
注 所有排序都是寫的由小到大排序的情況 1.插入排序 1 直接插入排序 穩定 arr sortedindex 1 key 注意這裡的下標 sortedindex 1 2 希爾排序 不穩定 希爾排序好的增量序列的共同特徵 希爾排序演算法 fromid 1801475 type syn 最後乙個增量必須...