选择算法

伪代码:

for i=2 to n

  min=A[i-1]

  for j=i-1 to n

    if A[j]<min

      min=A[j]
  A[i-1]=min
时间: 2024-12-14 21:52:54

选择算法的相关文章

算法系列笔记2(静态表顺序统计-随机选择算法)

问题:当给定存在静态表(如数组)中的n个元素,如何快速找到其中位数.最小值.最大值.第i小的数? 首先想到的方法是先对数组元素进行排序,然后找到第i小的元素.这样是可行的,但比较排序最快也需要O(nlgn),能否在线性时间内解决呢.这就是随机的分治法-随机选择. 思想:利用随机划分(在快速排序中介绍过)找到主元r,这样就将小于等于r的元素放在了其左边,大于r的元素放在了其右边.这是可以计算出r的rank为k,如果正好等于i,则就返回该元素:如果k大于i,则在左边中寻找第i小的元素,否则在右边中寻

冒泡与选择算法区别

1.冒泡 冒泡就是 1   2  3   4  5 6 7 8 9 2  1   3   4  5  6  7  8   9 2   3   1  4  5   6  7  8  9 2    3   4   1  5  6  7  8 9 2     3     4  5   1   6  7  8  9 ......... 2    3  4  5  6 7  8  9   1 这是第一次循环  如此循环9次  就变成 9  8  7  6  5  4  3  2   1 代码如下  这里是

线性选择算法(未完成)

#include "stdafx.h" #include<iostream> #include <stdlib.h> #include <time.h> using namespace std; #define SB -1 int RANDOM(int p, int r) { srand((unsigned)time(NULL)); return (rand() % (r - p + 1)) + p; } int partition(int a[],

Randomize select algorithm 随机选择算法

从一个序列里面选择第k大的数在没有学习算法导论之前我想最通用的想法是给这个数组排序,然后按照排序结果返回第k大的数值.如果使用排序方法来做的话时间复杂度肯定至少为O(nlgn). 问题是从序列中选择第k大的数完全没有必要来排序,可以采用分治法的思想解决这个问题.Randomize select 算法的期望时间复杂度可以达到O(n),这正是这个算法的迷人之处.具体的算法分析可以在<算法导论>这本书里查看. 贴出伪代码: RANDOMIZED-SELECT(A, p, r, i) 1 if p =

数据结构实践——置换-选择算法模拟

本文是针对[数据结构基础系列(10):外部排序]中的实践项目. [项目 ]置换-选择算法模拟 编敲代码,模拟置换-选择算法生成初始归并段的过程. 设大文件里的记录共同拥有18个: 15 4 97 64 17 32 108 44 76 9 39 82 56 31 80 73 255 68 内存工作区能够容纳5个记录,输出产生的归并段文件. 在模拟中,输入文件数据和输出的归并段数据均直接置在内存中就可以. 參考解答 #include <stdio.h> #include <malloc.h&

Nginx IP集群选择算法Java

查看Nginx 源码,将Nginx IP选择算法变为Java: package com.csst.msm; public class Test { /** * @param args */ public static void main(String[] args) { int hash =89;//初始值 int serverNum =2;//服务器个数 int addrlen=3;//IPV4 只计算前3个字节 int p; int[] addr = new int[]{192,168,10

第九章 中位数和顺序统计量 9.2 期望为线性时间的选择算法

package chap09_Medians_and_Order_Statistics; import static org.junit.Assert.*; import java.util.Random; import org.junit.Test; public class SearchAlorithms { /** * 分割(快速排序中对数组的分割) * * @param n * @param start * @param end * @return */ protected static

算法导论之七(中位数和顺序统计量之选择算法)

实际生活中,我们经常会遇到这类问题:在一个集合,谁是最大的元素?谁是最小的元素?或者谁是第二小的元素?....等等.那么如何在较短的时间内解决这类问题,就是本文要阐述的. 先来熟悉几个概念: 1.顺序统计量: 在一个由n个元素组成的集合中,第i个顺序统计量(order statistic)是该集合中第i小的元素.最小值是第1个顺序统计量(i=1),最大值是第n个顺序统计量(i=n).   2.中位数: 一个中位数是它所属集合的"中点元素",当n为奇数时,中位数是唯一的,位于i=(n+1

排序算法浅析——选择算法

选择算法 选择排序-简单选择算法(Selection sort) 算法描述 >每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完.即,先选出最小(或者最大)的一个数与第1个位置的数交换:然后在剩下的数当中再找最小(或者最大)的与第2个位置的数交换,依次类推,直到第n-1个元素(倒数第二个数)和第n个元素(最后一个数)比较为止. >具体过程如下图所示: 算法分析 平均时间复杂度:O(n^2) 空间复杂度:O(1) 稳定性:不稳定 代码实现

随机选择算法

随机选择算法和快速排序原理相似,所以有时候也称作“快速选择算法”,一般选择问题可以证明都能在O(n)时间内完成.随机选择算法的期望运行时间为线性时间,即Θ(n),但其最坏情况运行时间为O(n^2).最坏情况与快排一样,都是运气不好导致划分不均匀. 代码: #include "stdafx.h" #include <iostream> #include <vector> #include <stdlib.h> class QuicklySelect {