您的位置:首页 > 其它

CLRS 2.2分析算法

2015-07-18 12:18 260 查看
2.2-1

Θ(n3)\Theta(n^{3})

2.2-2

伪代码如下:

SELECTION-SORT(A):
for i = 1 to A.length - 1
min = i
for j = i + 1 to A.length
if A[j] < A[min]
min = j
temp = A[i]
A[i] = A[min]
A[min] = temp


运行代码如下:

void selection_sort(int *array,int length)
{
for(int i = 0; i < length - 1; ++i)
{
int min = i;    //记录最小值的下标
for(int j = i + 1; j < length; ++j)
if(*(array + min) > *(array + j))
min = j;
int temp = *(array + min);
*(array + min) = *(array + i);
*(array + i) = temp;
}
}


循环不变式:在第一个 for 循环开始迭代前,子数组A[1…i-1]包含了数组前 i-1 个最小数,且此子数组已经按非递减顺序排好,在第一个 for 循环开始迭代中,min 指示A[i..j−1]中最小数的下标。

之所以只需对前 n-1 个元素,是因为每次外面的 for 循环都会找出一个未排序的子数组中最小的的元素,执行 n-1 次后,前 n-1 个元素是数组前 n-1 个最小数,且已经排序,最后只剩最大的元素放在最末尾的位置,这样数组就排序完成。若进行 n 次,则最后一次是多余的。

最好和最坏的情况都需要Θ(n2)\Theta(n^{2})。

2.2-3

平均是检查一半,最坏情况下所有元素都要检查,所以都是Θ(n)\Theta(n)。

2.2-4

我们检查是否已经排序,假如已经排序好了就直接返回。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: