- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 563345 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 174226
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 3
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
|---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
排序算法--选择排序(Java实现)
! {( Y( L1 `3 Z' U
9 [6 c, J7 m4 } R选择排序概念
4 R) e5 ?; d5 R* b/ b8 }" j 选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。选择排序是不稳定的排序方法。 --form baike, u- g. C( s7 W2 T0 Z6 ~
9 _# j# e r d% \
思想* |; b, X9 M7 h" s- d1 {& B
* 每次从待排序的数据元素中选出最小或最大的一个元素,存放在序列的起始或末尾位置( x% d0 G+ K: s# u# P+ t- \
* 长度为n的数组一共需要进行n-1趟排序,每趟排序会进行一次值的交换;1 V) W- i# P" n6 z& F3 w$ |
* 当进行下一次排序时,范围缩小18 ]: k) B2 h" r7 t4 Q. p9 u
8 d% n3 ?' w; M) o. L d/ f0 L代码实现% e+ @$ a: J7 s1 _6 e1 V" J1 [. g
package com.lll.datastructure.sort;
1 L& E7 t6 E4 f: u! D2 T2 C/ D- g/ G4 N3 Y) ^3 [
import java.util.Arrays;0 t3 [; P) R$ y- s
. u' A8 F- ]9 g+ h! ]( S3 R/**. M! O! I$ c3 b( C! h# z. c
*
. B9 W7 g1 ]$ }" U2 x/ i* @ClassName: SelectionSort! |2 G9 L1 I3 P& f) w6 H2 D) J
* @Description: 选择排序7 W! j" B) j5 z9 }) K
* @Author: liulianglin; K3 l) ~% e3 _7 Z
* @DateTime 2022年9月7日 上午9:12:13
# K8 k! B5 D- f*
/ t+ x; w8 ^8 e: e E- u* 选择排序思想:
% F3 m0 d7 A3 s6 m9 n; M* 每次从待排序的数据元素中选出最小或最大的一个元素,存放在序列的起始或末尾位置
H# m h a2 z" ?. R, h2 @/ H* 长度为n的数组一共需要进行n-1趟排序,每趟排序会进行一次值的交换;1 h& X6 e# O/ a. {( {
当进行下一次排序时,范围缩小14 p9 U6 ]7 Z0 K4 G+ [$ J
*/
6 i& S, k3 |$ o9 z$ hpublic class SelectionSort {
! w2 c/ I( W3 N/ h1 _& T9 T9 Q8 P3 r public static void main(String[] args) {
( r8 o, [* T' M- F2 D1 Y' j0 D // 待排序数据
8 V9 h, ^+ }( z int[] arr = {1,3,2,4,7,54,11,34,9}; ' |8 ?: ~# i) @. G# f3 d& q
% o8 l( S# ]# ?' s5 D // 记录当前趟数查找到的最大值的数组下标 . n5 d/ |8 U1 Q( t5 a+ V0 c1 V6 [$ s
int max; i; Q. \1 b6 x( ?
7 q: }# i4 n r9 l* u; N# d; |$ ^1 F // 交换变量
: j& c0 _2 ?+ x int temp;/ n/ ]1 p' V6 Q" } u1 D
" @, d: L) _# `: E# {
System.out.println("排序前:" + Arrays.toString(arr));) O: p. \+ x* i! L% z* r
j$ B8 @7 h1 u. }0 |8 N/ r
// 外层控制循环需要排序的趟数 @2 x# p1 S2 c. L! @: x- C
for(int i = 0; i < arr.length - 1; i++) {
" v; q6 D$ A3 s9 y7 N& N // 每一趟都默认数组第一个元素为最大值. P7 M; ^7 B$ U
max = 0;
2 F8 a4 F3 a" t3 k0 F$ X
4 j, m( B' ~ t5 O4 G6 S7 k C // 内循环控制遍历数组的个数(每趟减1),并得到最大数的下标
$ Y+ v, N7 E/ n# g5 d1 U4 G1 m for (int j = 0; j < arr.length - i; j++) {( X% @7 S5 `8 Q+ m) r/ r. p
if (arr[j] > arr[max]) {) X. y8 h9 N9 E) h
max = j;
' u/ r: ~8 c, Q+ [3 j }
! D: k8 J* R: j7 X4 h6 ]4 T, a }
% o, D! l, l' V/ b, d. C. d
2 a% {! f! i2 v4 F0 ?$ z9 p2 l; F // 将交换变量设置为最大值, 将最大值暂存一下
6 ] \ B" V* ~3 L temp = arr[max];& E) P& {0 G4 W, t6 ?/ p
// 将当前最大值设置为当前未排序序列的最后一个元素值$ _: z8 L4 k' ?
arr[max] = arr[arr.length - 1 - i];
# E. x: H- |7 N% Y0 S // 将刚才缓存的最大值,设置为当前未排序队列的最后一个元素,完成交换
: ` V1 i1 C3 B9 j* k arr[arr.length - 1 - i] = temp;* j# U3 T7 F5 `; o" P+ G& @
}8 ^# }5 D" v7 H
! v3 T5 ]/ p9 v- l+ Q
System.out.println("排序后:" + Arrays.toString(arr));( R8 y, n7 u' C: p+ c
}
. h$ s0 i E5 C: {}
) E, i( N) `* h1 _1 W
/ x5 h; b; z! I2 ~* B关键步骤:
7 N) J8 P1 a4 w& r0 T
' h( Y: l( N( R" g1. 首先定义两个变量:分别表示最大值标 和 交换变量;
, R/ Q J; w0 v/ O6 x! w% v9 f, {! d5 Y- |3 _0 m5 ?* r0 g
2. 通过外层for循环,控制排序的趟数;; c4 m$ N- x9 Q& \6 i& m
, ]' x& }' h" K5 b. W
3. 通过内循环控制每趟需要遍历数组的次数,每趟会较上一趟减1,每次会得到最大值的下标。再下一趟外循环会将这个下标重新置为0;
' e" o# d5 w2 |( @1 s- W6 q$ i( y! S" J% Y
4. 每趟找到最大值后,将交换变量设置为最大值,目的是将最大值进行一个暂存;6 I* }* C% D0 g+ Q
, Y6 a _5 R9 V. V
5.然后将最大值设置为当前未排序序列的最后一个元素;% C! W; [- ~3 i" r* @1 ?
5 {% d6 {' p/ H8 K5 G2 ?6.最后将第4步缓存的最大值,设置为的当前未排序序列的最后一个元素1 u& b3 d5 U, X' Q3 ^% V" s2 o8 @! ]
( r6 D% q! h' z+ D7 j1 M
7.至此完成数据交换,继续进行步骤2,直到数据数据有序。+ U2 O% z( J# ^
$ r6 _: P/ B8 w6 _/ U# T
执行结果
* {' O2 T p, L! M% N9 E n7 P& n4 F* D; n2 B
————————————————
$ H2 W* f; m& r& p6 I4 W版权声明:本文为CSDN博主「大林子先森」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。# M& o3 Y: ]' {
原文链接:https://blog.csdn.net/liulianglin/article/details/126741594
& i4 Q; U; x, S& |- m! y9 X# B v: E
' g$ j# D$ r8 l# L. J+ ?
|
zan
|