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

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

1、选择排序算法的介绍

  选择排序是一种简单直观的排序算法,其基本原理如下:对于给定的一组记录,经过第一轮比较后得到最小的记录,然后将该记录的位置与第一个记录的位置交换;接着对不包括第一个记录以外的其他记录进行第二次比较,得到最小记录并与第二个位置记录交换;重复该过程,直到进行比较的记录只剩下一个为止。到此整个序列就已经是有序序列了。

2、选择排序算法的特点

  从简单选择排序的过程来看,它最大的特点是交换移动数据次数相当少,这样就节约了相应的时间。分析它的时间复杂度发现,无论是最好最差情况,其比较次数都是一样多,第 i 趟排序需要进行 n-i 次关键字比较,此时需要比较次,对于交换次数而言,当最好的时候,交换0次,最差的时候,也就是初始降时,交换次数为 n-1 次,基于最终的时间排序与交换次数总和,因此,总的时间复杂度依然为O(n*n),但简单选择排序的性能要优于冒泡排序。

3、选择排序算法的代码实现

 

1 package com.baozi.paixu; 2  3 import java.util.Arrays; 4  5 /** 6  * 选择排序算法: 7  * 将数组分为两部分,前边一部分时已经排序好的,后面是没有排序的,从后端未排序的部分选择一个最小值, 8  * 然后放在前端已经排序部分的最后 9  *10  * @author BaoZi11  * @create 2019-05-15-15:3912  */13 public class SelSort {14     public static void main(String[] args) {15         final int MAX = 15;16         int[] nums = new int[MAX];17         System.out.println("...............使用的是选择排序算法...............");18         for (int i = 0; i < MAX; i++) {19             nums[i] = (int) (Math.random() * 10 + 5);20         }21         System.out.println("排序之前的数组为...............");22         System.out.println(Arrays.toString(nums));23         System.out.println("排序之后的数组为...............");24         //使用选择排序算法进行排序:25         SelSort.selSort(nums);26         System.out.println(Arrays.toString(nums));27     }28 29     public static void selSort(int[] nums) {30         int length = nums.length;31         //需要进行n-1次循环比较,用于确定第0、1、2.....n-1个位置上的元素值32         for (int i = 0; i < length - 1; i++) {33             //变量temp_index用于记录当前位置的最小元素坐标,初始值赋值为i34             int temp_index = i;35             //选出当前位置之后的所有元素中最小的元素,循环结束temp_index中存放的就是当前最小元素的下标36             for (int j = i + 1; j < length; j++) {37                 if (nums[j] < nums[temp_index]) {38                     temp_index = j;39                 }40             }41             //如果最小元素的位置不是i的话,两个元素调换42             if (temp_index != i) {43                 int temp_num = nums[temp_index];44                 nums[temp_index] = nums[i];45                 nums[i] = temp_num;46             }47         }48     }49 }

 

转载于:https://www.cnblogs.com/BaoZiY/p/10931082.html

你可能感兴趣的文章
物联网通讯设备PCB电路板设计的思路:越紧凑越好
查看>>
深入理解JavaScript定时机制
查看>>
hdu 2531 Catch him (bfs)
查看>>
原生Base64编码/解码(OC与Swift)
查看>>
onblur 事件
查看>>
个人简介
查看>>
42-Remove Nth Node From End of List
查看>>
利用CMake管理QT5.5+VTK6.3+ITK4.8+Opencv3.0工程
查看>>
使用WinDbg分析.dump文件找出CPU占用与内存占用的问题根源
查看>>
Django搭建fastdfs错误
查看>>
mockito简单教程
查看>>
hive小tips(各种解析)
查看>>
pyspider 示例二 升级完整版绕过懒加载,直接读取图片
查看>>
win7 64位 python启动报错:无法启动此程序,因为计算机中丢失api-ms-win-crt-process-l1-1-0.dll...
查看>>
1.7动态输入详解
查看>>
call(),apply(),bind()区别?
查看>>
【转】最通用的分页存储过程SqlServer
查看>>
K8S 日志收集(三):ES 集群安装
查看>>
使用DirectDraw直接显示YUV视频数据 分类: windows...
查看>>
jquery笔记
查看>>