- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 563298 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 174212
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 3
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
|---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
排序算法--选择排序(Java实现)9 ^1 H0 {0 R8 S0 m6 @3 v7 z
; e3 [0 G/ Z+ U9 H. i# g' z; A
选择排序概念; O, i D( @+ |$ P- N7 _1 R U
选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。选择排序是不稳定的排序方法。 --form baike. D, J; e" p4 T- s4 X1 K
. O: w. p% G+ r0 q% u) G' U/ o思想
( x) a. O9 e; T8 F u; E/ b* 每次从待排序的数据元素中选出最小或最大的一个元素,存放在序列的起始或末尾位置
. }8 F; [& c' U3 L* 长度为n的数组一共需要进行n-1趟排序,每趟排序会进行一次值的交换;
2 S5 G$ I" x7 a* 当进行下一次排序时,范围缩小1- d% D( g n, b- d" P7 p+ H# g8 ]+ N8 F
. C- O5 y3 i8 i: x! J! p# Z. J
代码实现! y& d) ^: W9 L- J
package com.lll.datastructure.sort;/ L/ Q+ _: F8 B8 g8 d
- x9 z% ?6 L7 P
import java.util.Arrays;/ `: X# @' A7 ^& `! r& b
0 I, _# D9 P4 y
/**
. o3 q& G9 Z1 F" p) k( {$ d *
/ H6 e7 L, g9 @$ K5 t, ?* @ClassName: SelectionSort! f) a; g' W0 o4 U0 Q4 s% d
* @Description: 选择排序
6 t! d2 |# M6 `# y8 h* @Author: liulianglin
; H3 u6 m3 b0 c# {, o* @DateTime 2022年9月7日 上午9:12:13
5 ]* [) Q* _ ~7 g* 9 U, n9 d. Y. q' i9 u# K7 Q
* 选择排序思想:
1 b7 k+ M3 r/ n* 每次从待排序的数据元素中选出最小或最大的一个元素,存放在序列的起始或末尾位置 C3 {+ Q! l( p7 r) w$ Y7 Y
* 长度为n的数组一共需要进行n-1趟排序,每趟排序会进行一次值的交换;
; a, C) g: X& p" f! ?9 u; [5 s 当进行下一次排序时,范围缩小1
, b$ L% ]' [5 K8 B* D */
7 i* ^' o, y4 l3 H# e. r# S2 h+ jpublic class SelectionSort {6 z5 Y# A2 v: n' r3 w k) j# C
public static void main(String[] args) {
0 i% D/ I( O$ [( N1 K5 `- @ Y$ A& i // 待排序数据" E2 r1 f. d) ], k4 Q' C9 g: s# l
int[] arr = {1,3,2,4,7,54,11,34,9};
0 B6 b \; t+ M- q; c( W 6 e" S4 v- c6 v9 H+ y
// 记录当前趟数查找到的最大值的数组下标 8 H. q3 W2 J# z- [ N5 Q0 d
int max;" m/ s6 l! Q4 a+ [9 b2 f5 W
! N {" Q6 L3 J // 交换变量
1 Z1 l Q: J7 {* {$ F1 f int temp;6 T6 l$ T/ L# p: K/ |- k! w b: u. }
/ q: @) E' s# n$ g* }
System.out.println("排序前:" + Arrays.toString(arr));
3 x5 @' E" W; j8 L+ m
' h, X% ?# q* d+ s) X1 G // 外层控制循环需要排序的趟数
- l/ n: y1 X+ X, i+ k for(int i = 0; i < arr.length - 1; i++) {3 O7 v2 S: q. H2 }+ J) v% g
// 每一趟都默认数组第一个元素为最大值5 W. ?, H }8 D& ` {& X
max = 0;
6 U1 K' M! t) h3 `5 d0 Z2 c
- _ M# `2 N# J! O3 ]" I, p // 内循环控制遍历数组的个数(每趟减1),并得到最大数的下标* s! ~( K4 \0 y$ ?
for (int j = 0; j < arr.length - i; j++) {+ z4 y4 e, O1 r" U" a
if (arr[j] > arr[max]) {
/ S8 R2 c7 b( F5 n' } max = j;
4 X- c& Z; V, W" \5 ]( V } O7 n# G# c1 I" b V5 N
}( j" N& |; [) ~8 T; d/ @( x
9 ^: M6 l8 a: w X // 将交换变量设置为最大值, 将最大值暂存一下
' t0 d& {) [# _' @4 R temp = arr[max];$ V7 v( ?+ A. O5 `; m8 X6 a4 n: U
// 将当前最大值设置为当前未排序序列的最后一个元素值
4 D0 Q, ^ S r arr[max] = arr[arr.length - 1 - i];
" P. Z7 W# K% L // 将刚才缓存的最大值,设置为当前未排序队列的最后一个元素,完成交换1 I) d; m1 Q/ ~3 q: _+ ]
arr[arr.length - 1 - i] = temp;
" s) |! _: `9 \' Z }. u/ Z2 W6 L% Z2 s
# E( O' D8 }2 {' F% a3 J1 e System.out.println("排序后:" + Arrays.toString(arr));# Z# g, ^( [- H1 P+ x4 J
}
* D- V+ n6 T0 a& V}/ S3 Z {6 i9 l% [4 ~( Q4 `
& @" X' B" Z$ j/ d ^% J+ u
关键步骤:
' q6 q. O* J. f' q
2 P7 V4 \& U4 v2 h% F" n1. 首先定义两个变量:分别表示最大值标 和 交换变量;
4 A0 W9 r7 q; O% a( O6 w" p; s( O. A0 b' ?7 [$ B5 j
2. 通过外层for循环,控制排序的趟数;* E0 E& }. ]9 V `
' b% c5 y+ H! n
3. 通过内循环控制每趟需要遍历数组的次数,每趟会较上一趟减1,每次会得到最大值的下标。再下一趟外循环会将这个下标重新置为0;% Z( p7 ]7 D4 [* U p/ @9 v
3 w$ a5 L7 L# x n' m! p4. 每趟找到最大值后,将交换变量设置为最大值,目的是将最大值进行一个暂存;
; }: C3 E- y: ]( n8 p4 M7 f2 f* O; d+ ?# J
5.然后将最大值设置为当前未排序序列的最后一个元素;
5 M) x& t& [0 n3 W2 e5 l6 e k
5 a! B& r1 ?* }3 d6.最后将第4步缓存的最大值,设置为的当前未排序序列的最后一个元素) M A% N. T' A" W, r4 E$ i
' G7 Q3 N. q7 k; }" ?7.至此完成数据交换,继续进行步骤2,直到数据数据有序。
) X! `0 ]9 y f1 e8 d2 y8 P, C9 T6 x" g& ?
执行结果1 p! r2 M+ [* ~1 N
& C$ C1 @1 b+ B& o
————————————————
* Q' ~/ V0 L' L1 E P版权声明:本文为CSDN博主「大林子先森」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
0 F6 O. D# j' u a% b! X9 m原文链接:https://blog.csdn.net/liulianglin/article/details/1267415949 n, g% R' |' R9 L ?+ R" w
8 b4 j. \% `( D) o3 R
5 T1 V3 X, w7 o# V5 J. E
|
zan
|