演算法導論(4) 順序統計量

2021-07-14 20:15:21 字數 2495 閱讀 5170

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 ...