- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 564478 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 174566
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 3
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
|---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
排序算法--选择排序(Java实现)
( q/ h9 q; i9 ?" ^/ _' f
( v7 s. T3 |( z7 b+ W7 j: ^选择排序概念
8 F( r3 K7 K9 N3 {, v 选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。选择排序是不稳定的排序方法。 --form baike
: l0 p9 U3 L+ J) ?, M9 y0 M6 I' S. w Q! \9 B3 ^
思想
( t% j) k: @0 Z Z3 ^: k+ \* 每次从待排序的数据元素中选出最小或最大的一个元素,存放在序列的起始或末尾位置" h; H1 E0 a7 z; _. U l! c
* 长度为n的数组一共需要进行n-1趟排序,每趟排序会进行一次值的交换;% i2 n+ |: k1 P, l- r7 q
* 当进行下一次排序时,范围缩小1
" P* {6 Y L: ~7 w
1 u& X+ O, M! o# w* W; M$ V- L' |' ~. b代码实现
3 Q8 V1 ?( |" \5 O$ qpackage com.lll.datastructure.sort;2 e7 k5 G: I' i
0 ?, _* p# o _. Himport java.util.Arrays;! _9 v2 N+ a/ U, f& u
/ S# Y- Y1 v( i6 D! u/**
) P0 [ k: \1 Q2 p * s7 n1 i! n6 O, a
* @ClassName: SelectionSort
+ v+ M- H6 S0 o" A8 _) N* @Description: 选择排序
" ^' I7 o) E4 @+ Z2 {* @Author: liulianglin0 m1 r& g) T8 ?: D3 ]
* @DateTime 2022年9月7日 上午9:12:13
) k' j4 t v! m. m3 M+ {*
n- D; n y9 h" F) C0 G* 选择排序思想:
+ w. o7 V, [- Y: }7 I# v6 w% e* 每次从待排序的数据元素中选出最小或最大的一个元素,存放在序列的起始或末尾位置
: u! h0 t& F8 P/ H* 长度为n的数组一共需要进行n-1趟排序,每趟排序会进行一次值的交换;/ _1 U$ I. S5 p6 w- D! h# V
当进行下一次排序时,范围缩小1
2 R! b h/ b2 H$ \: g */
1 b( ~/ n7 J: Ipublic class SelectionSort {
! N+ K# _$ X* J% D7 d5 s7 m `# J public static void main(String[] args) { B: }2 u: f' C* C% ^% t% K" w- o9 S( [
// 待排序数据( o5 ^. ^4 s1 `6 f7 |0 I- i! D
int[] arr = {1,3,2,4,7,54,11,34,9}; ( P- B& `/ Y$ x+ J
. Y; e+ H; y- j c; Q
// 记录当前趟数查找到的最大值的数组下标
( @ W: s! ]1 B int max;
2 t) Z* s) Y& E7 ?* T
( x1 X1 W7 I+ C# l( ]/ t% j- ` // 交换变量
& p9 @: \6 d' O0 b: S6 z) Q int temp;
* N: {! @5 L6 i& \4 Q) p9 q
/ j% p K2 U; m" L) F System.out.println("排序前:" + Arrays.toString(arr));8 I! E: M( q+ J8 k$ F1 A
7 m( q; t1 _( M7 D- p' B
// 外层控制循环需要排序的趟数
5 [0 d- s; H1 X1 I: k: e for(int i = 0; i < arr.length - 1; i++) {' }* d0 a; z p# ?* m4 |
// 每一趟都默认数组第一个元素为最大值% P% h5 ^2 T" F9 ?4 @
max = 0;
* B" V. H {+ B( w+ H 0 d8 N+ x }2 A& Z; g; B: j8 F$ x
// 内循环控制遍历数组的个数(每趟减1),并得到最大数的下标" D6 d; Z z O; ~' c! j
for (int j = 0; j < arr.length - i; j++) {
U2 C% O9 y" r4 G8 Q; q2 E9 C if (arr[j] > arr[max]) {
) _3 _2 P9 X( c) Q( e# h9 o& o max = j;4 n" y1 K1 p/ F( E- o' {7 \9 E
}
- D$ Y# n- o# D& J0 k }
- \1 w$ T& u3 G6 r- Q* o1 j/ k' V- | - D9 G3 X0 f* S3 w% k0 I
// 将交换变量设置为最大值, 将最大值暂存一下. N+ z9 p4 d# Z7 u. C& \% ~+ ]! Y
temp = arr[max];& ^2 E8 E5 j. d" c
// 将当前最大值设置为当前未排序序列的最后一个元素值
6 f% V# h. Y, k% b arr[max] = arr[arr.length - 1 - i];. e( e# v7 J& ~3 h; {! y3 V( z# {1 J
// 将刚才缓存的最大值,设置为当前未排序队列的最后一个元素,完成交换4 ]( Q& ~7 T/ j8 y. Z
arr[arr.length - 1 - i] = temp;
, N0 j/ i3 _, i* p2 `) ]' x }
( {7 t7 _- }( M `" i
9 M6 [6 d7 m4 T( D5 G7 h' ^" s System.out.println("排序后:" + Arrays.toString(arr));
& m! M o; K5 [' d0 g }9 \0 C+ H& ^; y _2 m! m
}! i5 ~2 n2 d+ i4 ]7 Z0 T
* }5 _# D" Z! Q0 h& z' r
关键步骤:
3 r6 }' x& I2 p! L- i- s$ p
* `( D* ~5 d( Y, Q: Y3 w0 V j; h1. 首先定义两个变量:分别表示最大值标 和 交换变量;# @1 U9 g$ `9 o7 B8 v" h7 u$ S k
+ I' I+ X8 q4 z( X8 }9 M6 q/ F2. 通过外层for循环,控制排序的趟数;- [8 [( S$ P" }% \ O- T0 k
+ _7 p. E( l) ?0 o6 [; ^% Z! p
3. 通过内循环控制每趟需要遍历数组的次数,每趟会较上一趟减1,每次会得到最大值的下标。再下一趟外循环会将这个下标重新置为0;- j0 O% H5 b8 d F$ L
0 {, U3 z4 X" d8 ?4. 每趟找到最大值后,将交换变量设置为最大值,目的是将最大值进行一个暂存;
! ?$ w. Y( ]9 L: n9 n# w
- c4 }$ g7 w! H7 E2 D2 \/ {5.然后将最大值设置为当前未排序序列的最后一个元素;
$ A s8 f# W( X
/ m8 B) [% E) w. {6.最后将第4步缓存的最大值,设置为的当前未排序序列的最后一个元素
9 ?/ M+ ]7 D. e$ J2 G, O6 i2 e: I; ?7 p0 _2 U8 D( G
7.至此完成数据交换,继续进行步骤2,直到数据数据有序。# {4 b+ f" r( ]- q; P
# A! A$ I! s) Y& I4 b- d/ G& l 执行结果
6 w* \# `; C& ?- g; }
8 u7 r/ J6 Z5 \( g: H————————————————9 U2 |8 s7 _0 q5 l2 h
版权声明:本文为CSDN博主「大林子先森」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。% \6 j0 b! ~2 O. T
原文链接:https://blog.csdn.net/liulianglin/article/details/126741594
2 ]: `: l i; h; w. {1 Z& w( z& J" A, Y% `) m% t- k
* |+ p0 x: C, W# z' M1 O |
zan
|