算法(algorithms)基础之:选择排序

14 篇文章 0 订阅
5 篇文章 0 订阅

转自:算法(algorithms)基础之:选择排序 — 没那么简单的博客

数组A中有n个数,首先找出A中的最小元素并将其与A[1]中的元素进行交换。接着,找出A中的次最小原始并将其与A[2]中的元素进行交换。对A中前n-1个元素按该方式继续。该算法称为选择算法。

  1. 假定数组A[5, 2, 4, 6, 1, 3]是需要排序的数据, 长度为6,用php实现如下:
<?php
/**
 * 选择排序[正序]
 * author: nsimple
 * date: 2016/11/23
 * link: http://nsimple.top
 */

/**
 * 选择排序 正序
 * @param $arr
 */
function selectionSort($arr) {
    $len = count($arr);
    for($i = 0; $i < $len - 1; $i++ ) {
        //假设最小值$min=i
        $min = $i;
        for($j = $i+1; $j < $len; $j++) {
            if($arr[$j] < $arr[$min]) {
                $min = $j;
            }
        }
        if($min != $i) {
            $tmp = $arr[$min];
            $arr[$min] = $arr[$i];
            $arr[$i] = $tmp;
            process($step, $arr);
        }
    }
}

//记录排序步骤
function process(&$step, $arr = array())
{
    echo '<pre>';
    $step++;
    echo '第' . $step . '步排序:';
    print_r($arr);
    echo '</pre>';
}
$arr = [5, 2, 4, 6, 1, 3];
selectionSort($arr);
  1. 执行结果如下:
第1步排序:Array
(
    [0] => 1
    [1] => 2
    [2] => 4
    [3] => 6
    [4] => 5
    [5] => 3
)
第2步排序:Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => 6
    [4] => 5
    [5] => 4
)
第3步排序:Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => 4
    [4] => 5
    [5] => 6
)
  1. 用Go实现如下:
/*
 选择排序[正序]
 author: nsimple
 date:2016年11月23日15:24:03
 link: http://nsimple.top
*/
package main

import (
    "fmt"
)

/*追踪排序步骤*/
func showStep(args []int, step *int) {
    *step++
    fmt.Printf("第%d步排序结果:%v\n", *step, args)
}

/*选择排序*/
func selctionSort(arr []int) {
    length := len(arr)
    step := 0
    p := &step
    for i := 0; i < length-1; i++ {
        min := i
        j := i + 1
        for ; j < length; j++ {
            if arr[min] > arr[j] {
                min = j
            }
        }
        if min != i {
            tmp := arr[i]
            arr[i] = arr[min]
            arr[min] = tmp
            showStep(arr, p)
        }
    }
}

func main() {
    arr := []int{5, 2, 4, 6, 1, 3}
    selctionSort(arr)
}

执行结果:

D:/Go/bin/go.exe build -i [D:/Go_Workspace/algorithms/selection_sort]
Success: process exited with code 0.
D:/Go_Workspace/algorithms/selection_sort/selection_sort.exe  [D:/Go_Workspace/algorithms/selection_sort]
第1步排序结果:[1 2 4 6 5 3]
第2步排序结果:[1 2 3 6 5 4]
第3步排序结果:[1 2 3 4 5 6]
Success: process exited with code 0.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值