博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
选择排序
阅读量:5020 次
发布时间:2019-06-12

本文共 3023 字,大约阅读时间需要 10 分钟。

 选择排序

选择排序是最简单的排序方法之一,它的做法是这样的:首先,找出数组中最小的那个元素,将最小的元素与第一个元素的位置互换,然后找出数组中第二小的元素,与数组中第二个元素互换位置(如果要比较的元素是当前最小,则自己和自己交换),以此类推,直到遍历了整个数组。这种方法叫做选择排序,因为它会不断地选择剩余元素中的最小者。

 

表格1-1排序步骤
初始值: 1 10 -5 9 8 7 3
第一趟: -5 10 1 9 8 7 3
第二趟: -5 1 10 9 8 7 3
第三趟: -5 1 3 9 8 7 10
第四趟: -5 1 3 7 8 9 10
第五趟: -5 1 3 7 8 9 10
第六趟: -5 1 3 7 8 9 10
第七趟: -5 1 3 7 8 9 10

 

如表格1-1所示,红色代表已经排序好的序列,每次交换都能排定一个元素,因此交换的总次数是N,算法的运行时间和输入无关,因为内循环会进行(N-1)+(N-2)+……+1=N(N-1)/2~(N2/2)次比较,因此选择排序的时间复杂度为O(n2)

 

以下代码分别为C、Java、Python、Scala

  

 代码1-2为选择排序的C语言实现

#include 
void selection_sort( int arr[], int len );void selection_sort( int arr[], int len ){ int i = 0, j = 0, min = 0, temp = 0; for ( i = 0; i < len; i++ ) { min = i; for ( j = min + 1; j < len; j++ ) { if ( arr[min] > arr[j] ) { min = j; } } temp = arr[i]; arr[i] = arr[min]; arr[min] = temp; }}void main(){ int i = 0; int arr[] = { 1, 10, -5, 9, 8, 7, 3 }; int len = sizeof(arr) / sizeof(arr[0]); printf( "待排序数组:" ); for ( i = 0; i < len; i++ ) { printf( "%d ", arr[i] ); } printf( "\n" ); selection_sort( arr, len ); printf( "排序后数组:" ); for ( i = 0; i < len; i++ ) { printf( "%d ", arr[i] ); }}

  

 代码1-3为选择排序的Java实现

import java.util.Arrays;public class Selection {    public static void selectionSort(int... arr) {        for (int i = 0; i < arr.length; i++) {            int min = i;            for (int j = min + 1; j < arr.length; j++) {                if (arr[min] > arr[j]) {                    min = j;                }            }            int temp = arr[i];            arr[i] = arr[min];            arr[min] = temp;        }    }    public static void main(String[] args) {        int[] arr = { 1, 10, -5, 9, 8, 7, 3 };        System.out.print("待排序数组:" + Arrays.toString(arr));        System.out.println();        selectionSort(arr);        System.out.println("排序后数组:" + Arrays.toString(arr));    }}

  

代码1-4为选择排序的Python实现

# coding:utf-8def selection_sort(arr):    for i in range(0, len(arr)):        min = i        for j in range(min + 1, len(arr)):            if arr[min] > arr[j]: min = j        temp = arr[i]        arr[i] = arr[min]        arr[min] = temparr = [1, 10, -5, 9, 8, 7, 3]print "待排序数组:", arrselection_sort(arr)print "排序后数组", arr

  

代码1-5为选择排序的Scala实现

import java.util.Arraysobject Selection {  def selectionSort(comparator: (Int, Int) => Boolean)(arr: Array[Int]) {    for (i <- 0 until arr.length) {      var min = i      for (j <- min + 1 until arr.length) {        if (comparator(arr(min), arr(j))) {          min = j        }      }      var temp = arr(i)      arr(i) = arr(min)      arr(min) = temp    }  }  def main(args: Array[String]): Unit = {    val arr = Array(1, 10, -5, 9, 8, 7, 3)    println("待排序数组:" + Arrays.toString(arr))    selectionSort(_ > _)(arr)    println("排序后数组:" + Arrays.toString(arr))  }}

 

转载于:https://www.cnblogs.com/fuxinyue/p/6916591.html

你可能感兴趣的文章
Git Submodule管理项目子模块
查看>>
学会和同事相处的30原则
查看>>
NOJ——1568走走走走走啊走(超级入门DP)
查看>>
文件操作
查看>>
Python:GUI之tkinter学习笔记3事件绑定(转载自https://www.cnblogs.com/progor/p/8505599.html)...
查看>>
jquery基本选择器
查看>>
hdu 1010 dfs搜索
查看>>
搭建wamp环境,数据库基础知识
查看>>
android中DatePicker和TimePicker的使用
查看>>
SpringMVC源码剖析(四)- DispatcherServlet请求转发的实现
查看>>
Android中获取应用程序(包)的大小-----PackageManager的使用(二)
查看>>
MySQL 索引与 B+ 树
查看>>
idea 取消代码下波浪线
查看>>
Hibernate之CRUD操作
查看>>
oracle 11g express 快速入门
查看>>
程序开发心理学阅读笔记之二
查看>>
[学习心得][Introduction to ASP.NET Core 1.0]4-1 Creating a Form
查看>>
前端“智能”静态资源管理
查看>>
Javascript 数组循环遍历之forEach
查看>>
C# WinForm窗体及其控件的自适应
查看>>