1.最大值與最小值
將一對輸入元素相互進行比較,然後把較小的與當前的最小值比較,把較大的與當前最大值比較,這樣每兩個元素比較3次,最多需要3*n/2次比較可以同時找到一組輸入元素中的最大值與最小值。
2.順序統計量
乙個n個元素組成的集合中,第i個順序統計量是該集合中第i小的元素。中位數是i=(n+1)/2處的元素。
期望為線性時間的選擇演算法randomselect與最壞情況為線性時間的選擇演算法select如下:
#include
using
namespace
std;
#include
#include
template
void quicksort2(t a, int left, int right)
}temp = a[right];
a[right] = a[i + 1];
a[i + 1] = temp;
q = i + 1;
quicksort2(a, left, q - 1);
quicksort2(a, q + 1, right);
}}int randompartition(int a, int left, int right)
}temp = a[right];
a[right] = a[i + 1];
a[i + 1] = temp;
return i + 1;
}int randomselect(int a, int left, int right, int i)
int q = randompartition(a, left, right);
int k = q - left + 1;
if (i == k)
else
if (i < k)
else
}int partition(vector
&a, int left, int right,int b)
}int temp = a[right];
a[right] = a[m];
a[m] = temp;
int x = a[right];
int i, j;
i = left - 1;
for (j = left; j < right; j++)
}temp = a[right];
a[right] = a[i + 1];
a[i + 1] = temp;
return i + 1;
}//原陣列使用vector是因為尋找中位數的中位數時的陣列不固定,但也需要呼叫select函式
int select(vector
&a, int left, int right, int dst)
vector
temp;
vector
b;for (int i = left; i 1; i += 5)
for (int j = i; j - i < 5; j++)
//插入排序
for (int j = 1; j < 5; j++)
b[m + 1] = t;
}temp.push_back(b[2]);
b.clear();
}if (n%5!= 0)
//插入排序
for (int i = 1; iint t = b[i];
int j = i - 1;
while (j >=0 && b[j]>t)
b[j + 1] = t;
}temp.push_back(b[(b.size()+1)/2-1]);
b.clear();
}int q = partition(a, left, right, select(temp, 0, temp.size()-1, (temp.size()+1) / 2));
int k = q - left + 1;
if (dst == k)
else
if (dst < k)
else
}int main()
cout
<< endl;
int num =12;
int b=randomselect(a, 0, 21, num);
cout
<< "方法一:第"
<0, 21, num);
cout
<< "方法二:第"
<< num << "小的數為:"
<< b << endl;
quicksort2(a, 0, 21);
cout
<< "快速排序後為:"
排序和順序統計量(演算法導論)
人一生別太狂,指不定誰輝煌 總結排序演算法的執行時間 演算法最壞執行時間 平均期望執行時間 是否是原址排序 插入排序o n2 o n2 是 歸併排序o nlgn o nlgn 否 堆排序o n lgn 是快速排序o n2 o nlgn 期望 是 計數排序o k n o k n 否基數排序o d k ...
演算法導論 中位數與順序統計量
華電北風吹 天津大學認知計算與應用重點實驗室 日期 2015 7 7 一 選擇最大值或者最小值的最優演算法 對於長度為n的陣列,已證找最大值或者最小值比較操作下界就是n 1。所以只需要讓第乙個值為初始最大值或者初始最小值,用所有的值與這個值比較,更新這個值即可。def minimum a minnu...
演算法導論 中位數和順序統計量
在乙個由n個元素組成的集合中,第i個順序統計量是該集合中第i小的元素。乙個中位數是它所屬集合的 中點元素 當n為奇數時,中位數是唯一的,位於i n 1 2處 當n為偶數時,存在兩個中位數,分別位於i n 2和i n 2 1處。如果不考慮n的奇偶性,中位數總是出現在i n 1 2 處 下中位數 和i ...