【BDSP亂數】謝米閃教程
//氣泡排序
for(int i = 0; i < arr.size(); i++)
{
for(int j = 1; j < arr.size() - i; j++)
{
//從第二個數開始,若前一個數比後一個數大,則交換,直到末尾為每次 j 迴圈內最大的數
if(arr[j - 1] > arr[j])
{
int temp = arr[j - 1];
arr[j - 1] = arr[j];
arr[j] = temp;
}
}
}
//選擇排序
int temp, minindex;
for(int i = 0; i < arr.size(); i++)
{
//預設最小值下標為未排序的第一個
minindex = i;
for(int j = i; j < arr.size(); j++)
{
//向後遍歷,將更小值的下標更新給 minindex
if (arr[j] < arr[minindex])
{
minindex = j;
}
}
//交換最小值和未排序的陣列中的首個元素
temp = arr[i];
arr[i] = arr[minindex];
arr[minindex] = temp;
}
//插入排序
for(int i = 1; i < len; i++)
{
//預設第一個數是有序的,
int temp = a[i];
int j = i - 1;
//從已經排序的序列最右邊開始比較,找到比其小的數
while(j >= 0 && temp < arr[j])
{
arr[j + 1] = arr[j];
j--;
}
//存在比其小的數,插入
arr[j + 1] = temp;
}
//希爾排序
int h = 1;
while(h < len / 3)
{
//設定增量
h = h * 3 + 1;
}
while(h >= 1)
{
for(int i = 0; i < len; i++)
{
//相差增量的數進行比較,若前一個數比後一個數大,則交換
for(int j = i; j >= h &&arr[j-h] > arr[j]; j -= h)
{
int temp = arr[j - h];
arr[j - h] = arr[j];
arr[j] = temp;
}
}
//直至for迴圈結束,在減小增量重新排序
h = h / 3;
}