您的位置:首页 > 编程语言 > Go语言

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

2016-11-25 10:57 357 查看
转自:算法(algorithms)基础之:选择排序 — 没那么简单的博客

数组A中有n个数,首先找出A中的最小元素并将其与A[1]中的元素进行交换。接着,找出A中的次最小原始并将其与A[2]中的元素进行交换。对A中前n-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步排序: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
)


用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.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  php 算法 博客 数据