选择排序-Python与PHP实现版

选择排序Python实现

import random

# 生成待排序数组
a=[random.randint(1,999) for x in range(0,36)]

# 选择排序
def selectionSort(array):
    i=0
    while i<len(array)-1:
        min = i
        j = i+1

        while j<len(array):
            if array[min] > array[j]:
                min = j
            j = j+1

        if i != min:
            array[i],array[min] = array[min],array[i]

        i = i+1

# 使用选择排序处理数组
selectionSort(a)
print(a)

快速排序PHP实现

<?php
// 生成待排序数组
$a = [];
for($i=0;$i<36;$i++){
    array_push($a,mt_rand(1,999));
}
shuffle($a);

/**
 * 选择排序算法 selection sort
 * @param  [type] a 待排序数组的地址
 * @return null
 */
function selectionSort(&$a){
    $min = 0;
    $len = count($a);

    for($i = 0; $i<$len-1; $i++){
        $min = $i;

        // 在下标为$i之后的数组元素中查找比$a[$i]小的元素
        for($j = $i+1; $j<$len; $j++){
            // 若找到比$a[$i]小的元素,则记录此元素的下标
            if($a[$min] > $a[$j]){
                $min = $j;
            }
        }
        // 若找到比$a[$i]小的元素,则交换元素位置
        if($min != $i){
            $a[$i] += $a[$min];
            $a[$min] = $a[$i] - $a[$min];
            $a[$i] -= $a[$min];
        }

    }
}

selectionSort($a);
var_dump($a);

选择排序时间复杂度说明

比较次数:n(n-1)/2

交换次数:最好的时候为0,最差的时候为n-1次

总时间复杂度:O(n2

尽管选择排序与冒泡排序的时间复杂度同为O(n2),但性能上还是要略优于冒牌排序。

时间: 2024-08-06 07:26:47

选择排序-Python与PHP实现版的相关文章

选择排序——Python实现

选择排序: 选择排序(Selection sort)是一种简单直观的排序算法.它的工作原理如下.首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾.以此类推,直到所有元素均排序完毕. 选择排序的主要优点与数据移动有关.如果某个元素位于正确的最终位置上,则它不会被移动.选择排序每次交换一对元素,它们当中至少有一个将被移到其最终位置上,因此对n个元素的表进行排序总共进行至多n-1次交换.在所有的完全依靠交换去移动

选择排序 python

选择排序是比较简单的一种排序,它的主要思想是每次循环找出最小的数,把它放到未排序的子数组的首位,然后进行下一次循环. 下一次循环的时候,就多了一个排好序的数,少了一次比较.用python如下实现: def Choose_sort(a): N = len(a) for i in range(0, N): min_index = i #最小数的起始位置 for j in range(i+1, N): #每次从未排序的子数组开始循环 if a[min_index] > a[j]: min_index

选择排序python实现

选择排序(Selection sort)是一种简单直观的排序算法.它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完.注意每次查找到最小值之后要将之从原列表中弹出,避免重复查找. 1 def findsmallest(d): 2 smallest = d[0] 3 smallest_number = 0 4 for i in range(1,len(d)): 5 if smallest > d[i]: 6 smallest =

选择排序---堆排序算法(Javascript版)

堆排序分为两个过程: 1.建堆. 堆实质上是完全二叉树,必须满足:树中任一非叶子结点的关键字均不大于(或不小于)其左右孩子(若存在)结点的关键字. 堆分为:大根堆和小根堆,升序排序采用大根堆,降序排序采用小根堆. 如果是大根堆,则通过调整函数将值最大的节点调整至堆根. 2.将堆根保存于尾部,并对剩余序列调用调整函数,调整完成后,再将最大跟保存于尾部-1(-1,-2,...,-i),再对剩余序列进行调整,反复进行该过程,直至排序完成. 以下代码在nodejs中执行通过 //调整函数function

选择排序---堆排序算法(Javascript版) 降序排列

//调整函数 function headAdjust(elements, pos, len){ //将当前节点值进行保存 var swap = elements[pos]; //定位到当前节点的左边的子节点 var child = pos * 2 + 1; //递归,直至没有子节点为止 while(child < len){ //如果当前节点有右边的子节点,并且右子节点较小的场合,采用右子节点 //和当前节点进行比较 if(child + 1 < len && elements

排序算法(三)冒泡、选择排序的Python实现及算法优化详解

说在前面 最近一年太忙,博客长草了.近日用Python实现了常用排序算法,供大家参考. Java版本排序算法及优化,请看以前的文章. <排序算法之简单排序(冒泡.选择.插入)> <排序算法(二)堆排序> 1.排序概念 这里不再赘述,请参看前面2篇文章 2.简单排序之冒泡法Python实现及优化 原理图 2.1.基本实现 num_list = [     [1, 9, 8, 5, 6, 7, 4, 3, 2],     [1, 2, 3, 4, 5, 6, 7, 8, 9] ] nu

排序算法分析【三】:选择排序(附Python&amp;C++代码)

原理 选择排序(Selection sort)是一种简单直观的排序算法.它的工作原理如下. 首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾.以此类推,直到所有元素均排序完毕. 选择排序的主要优点与数据移动有关.如果某个元素位于正确的最终位置上,则它不会被移动.选择排序每次交换一对元素,它们当中至少有一个将被移到其最终位置上,因此对n个元素的表进行排序总共进行至多n-1次交换.在所有的完全依靠交换去移动元素

选择排序的3种语言实现方法(C java python)

1.选择排序的思路是:遍历数组,第一遍找出所有成员的最小值,放到数组下标为0的位置,第二遍从剩余内容中,再次找出最小值,放到数组下标为1的位置,以此类推,遍历完成所有的数组内容,最后结果就是:数组是按照从小到大顺序进行排序的. 2.按照C语言.java.python的顺序,分别实现如下,在对应编译平台上都是编译通过的: C语言版本: #include <stdio.h> int main() { int i; int j; int temp; int origin[] = {2,1,4,3,5

JavaScript ,Python,java,Go系列算法之选择排序

常见的内部排序算法有:插入排序.希尔排序.选择排序.冒泡排序.归并排序.快速排序.堆排序.基数排序等.用一张图概括: 选择排序 选择排序是一种简单直观的排序算法,无论什么数据进去都是O(n2) 的时间复杂度.所以用到它的时候,数据规模越小越好.唯一的好处可能就是不占用额外的内存空间了吧.通俗来说就是你们中间谁最小谁就出列,站到队列的最后边,然后继续对着剩余的无序数组说你们中间谁最小谁就出列,站到队列的最后边,一直到最后一个,继续站到最后边,这样数组就有了顺序,从小到大. 1.算法步骤 首先在未排