算法(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实现如下:
执行结果如下:
用Go实现如下:
执行结果:
数组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.
相关文章推荐
- 【算法基础】冒泡、选择、插入排序(三种基本排序)
- 黑马程序员—Java基础学习笔记之排序算法:选择排序&冒泡排序
- 基础算法(三)---选择排序(Java)
- 算法与数据结构基础(一)排序基础1.选择排序
- 基础算法 :冒泡排序,选择排序。。。。
- 基础算法之排序(2)--选择排序
- 基础算法之选择排序
- 【基础算法】选择排序
- java基础算法之选择排序
- 基础算法之 选择排序
- 基础算法之排序(2)--选择排序 改进
- 基础算法-直接选择排序
- 基础算法(一):选择排序和冒泡排序
- 算法基础之----直接选择排序
- 基础算法之四--排序: 之选择排序
- 基础算法之排序(2)--简单选择排序
- 基础算法-直接选择排序
- 基础算法学习(一)__几种排序:选择、插入、冒泡和快排
- 算法基础:排序(一)——选择排序、插入排序、Shell排序——Python实现
- 算法基础之----二元选择排序