Python语言与信息数据获取和机器学习程序员

选择排序

2018-02-07  本文已影响7人  cuzz_

介绍

选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完

python描述

import random

def find_min_one(array, start, end):
    index = start
    small = array[start]
    for i in range(start, end):
        if array[i] < small:
            small = array[i]
            index = i
    return index 

def select_sort(array):
    for i in range(len(array)):
        start = i
        end = len(array)
        index = find_min_one(array, start, end)
        array[i], array[index] = array[index], array[i]
    return array

array = [random.randint(0, 100) for i in range(10)]
print("初始数组",array)
res = select_sort(array)
print("排序后",res)

java描述

public class Selection {
    
    // 实现了Comparable接口的都可以比较
    public static void sort(Comparable[] a){
        int N = a.length;
        for (int i = 0; i < N; i++){
            int min = i;
            for (int j = i + 1; j < N; j++){
                if(less(a[j], a[min])){
                    min = j;
                }
            }
            exch(a, i, min);
        }   
    }
    
    public static void main(String[] args) {
        Integer[] a = {2, 3, 1, 3, 4, 8, 6, 10};
        sort(a);
        assert isSorted(a);
        show(a);
    }
    
    public static boolean less(Comparable V , Comparable W){
        return V.compareTo(W) < 0;
    }
    
    public static void exch(Comparable[] a, int i, int j){
        Comparable temp = a[i];
        a[i] = a[j];
        a[j] = temp;
    }
    
    public static void show(Comparable[] a){
        for (int i = 0; i < a.length; i++){
            System.out.print(a[i] + " ");   
        }
        System.out.println();
    }
    
    // 测试数组元素是否有序
    public static boolean isSorted(Comparable[] a){
        for (int i = 1; i < a.length; i++){
            if(less(a[i], a[i-1])){
                return false;
            }
        }
        return true;
    }
}

算法分析

第一次需要检查n个元素,但随后检查的元素数依次为n – 1, n – 2, …, 2和1,所以选择排序的最坏时间复杂度是O(n2)

上一篇 下一篇

猜你喜欢

热点阅读