- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 565600 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 174903
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 3
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
|---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
排序算法--选择排序(Java实现)- }- ~3 h; z- s3 |2 f8 D/ o9 s& P" ^
" Q. P. k. I$ D# P' `2 R, V选择排序概念! Z' q5 R9 S. d7 H! R
选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。选择排序是不稳定的排序方法。 --form baike
4 Y* T6 u, l" T: H
, j5 M' w7 b: q0 g思想
+ a0 k5 @4 m7 E7 W6 m9 M8 z* 每次从待排序的数据元素中选出最小或最大的一个元素,存放在序列的起始或末尾位置
& r8 Q( [, d. H7 K+ ~1 }, z! U* 长度为n的数组一共需要进行n-1趟排序,每趟排序会进行一次值的交换;
2 r3 } [& {# L* 当进行下一次排序时,范围缩小1
+ L, ^; R, L8 t' L- e& U% b) C
3 }7 _6 C' W$ {( e4 Y7 r e代码实现
2 x; w. K; F/ G5 R6 o2 u: a( m0 x+ N: hpackage com.lll.datastructure.sort;
0 Q4 b/ L- y5 O6 B& H6 I: P4 t; z U8 X0 I2 K0 Q- d/ u
import java.util.Arrays;
& N4 |: i |/ g/ W( p* Y) F4 Q0 t4 s! R0 q$ @: V/ L. D: \
/**
# B) [8 j. [ Y3 g * % U" c. y5 z' r" u7 K& T" g5 i
* @ClassName: SelectionSort7 v, B0 g; v9 I4 P
* @Description: 选择排序" ^+ g! {, K s1 M+ S
* @Author: liulianglin
( \' Z6 Q1 A6 {' ~* @DateTime 2022年9月7日 上午9:12:13, u( d9 `/ A) @0 z! f
* + J5 {. y8 k6 x7 L( k/ L' v) F: O. \5 z
* 选择排序思想:# Q" l1 }# `4 a3 m0 p* g% N4 ]
* 每次从待排序的数据元素中选出最小或最大的一个元素,存放在序列的起始或末尾位置
' A3 ]: W0 r5 X* 长度为n的数组一共需要进行n-1趟排序,每趟排序会进行一次值的交换;5 `5 \& ^0 j C9 m" {9 C
当进行下一次排序时,范围缩小1, W* O0 i; v: d8 j7 f" y' _
*/
1 l u& E5 U! t# Ipublic class SelectionSort {
$ F) R: l4 g! n# k. L j0 a# j public static void main(String[] args) {% _6 u. d* u. n( j+ {; R2 y
// 待排序数据/ o) v4 d. @9 E7 j! s
int[] arr = {1,3,2,4,7,54,11,34,9}; 9 [# e! t z2 B% y8 J
- s5 W% W; V- }$ y t p7 T* t
// 记录当前趟数查找到的最大值的数组下标
" A, D; M7 B* K int max;
_5 t( Y" b3 Q, H 7 s: j, t) y6 a8 O: T% s
// 交换变量$ t# r& z# i( j4 j4 b; @- X
int temp;
3 t$ M7 Q# }+ w" g- [1 M8 z6 c
# k! Q- s$ `( r* W2 V- d6 ]" @! o System.out.println("排序前:" + Arrays.toString(arr));! ^7 V# s, f6 y: \+ i
& s0 K+ W: B& Q0 m6 }
// 外层控制循环需要排序的趟数
2 q/ e2 ]" ], D9 u7 p+ v3 Q& L5 s for(int i = 0; i < arr.length - 1; i++) {
- [' a0 U7 e" W; S8 l& g // 每一趟都默认数组第一个元素为最大值
- Q: I0 R( r1 X$ V+ u max = 0;
! H+ ^' W* b4 | 5 }) V* T+ f/ i4 Q/ M
// 内循环控制遍历数组的个数(每趟减1),并得到最大数的下标
9 ]% S# n1 P0 @) J5 k f9 s for (int j = 0; j < arr.length - i; j++) {! L% A7 {- ~- F0 @1 b1 Q
if (arr[j] > arr[max]) {
- q' _% M- V" u, ~9 M max = j;# w& m0 k/ Q* U! y0 _" X
}! ]* G: m' j- `. V( h% e
}
1 h6 j/ G6 G, p0 T- J, j# u ! C5 e0 O9 d& l9 E5 m: F& o7 ~
// 将交换变量设置为最大值, 将最大值暂存一下
) ]9 c5 ?+ H3 [ temp = arr[max];
9 D% N# z( {& S8 } ~+ _! F // 将当前最大值设置为当前未排序序列的最后一个元素值+ s$ F* F( Z9 U2 i- g7 j
arr[max] = arr[arr.length - 1 - i];
# E( q. c6 w0 b% O/ P) `! I$ {% V // 将刚才缓存的最大值,设置为当前未排序队列的最后一个元素,完成交换" G' ^/ S- p( v7 f; N' q8 D
arr[arr.length - 1 - i] = temp;
* ]& ]$ u. M- `3 X5 L) V" a }" z3 K Q. H/ A! o
8 L6 K( r; z; Z* D System.out.println("排序后:" + Arrays.toString(arr));9 e- h. J) u. ?1 l. N8 S
}* J+ @' p, x: F5 s) |
}
, ~0 I) |. ?9 {$ M8 I M5 Z$ [$ \/ z% j" [; a8 }7 \
关键步骤:4 ]+ W4 E# l }- Z( s7 _
( J' D; N7 _# \8 ?/ V( Q* r" ^
1. 首先定义两个变量:分别表示最大值标 和 交换变量;
4 `# E, U% _$ h$ E L; H/ f9 @+ m. P+ A5 N- P% }
2. 通过外层for循环,控制排序的趟数;' f! t. A7 N0 o" S
; I8 b# J5 O8 S% b, v: w
3. 通过内循环控制每趟需要遍历数组的次数,每趟会较上一趟减1,每次会得到最大值的下标。再下一趟外循环会将这个下标重新置为0;6 k( ~7 x* o# ] b
+ N. @0 }, s9 R! U4 s$ S, |4. 每趟找到最大值后,将交换变量设置为最大值,目的是将最大值进行一个暂存;; D$ N/ {# M T: w$ Y9 R
5 ^6 L# w6 l' s2 J
5.然后将最大值设置为当前未排序序列的最后一个元素;
1 X! Y5 ]9 F6 D4 A f
! \" C6 s7 X9 q8 ^6 l' L6.最后将第4步缓存的最大值,设置为的当前未排序序列的最后一个元素* l+ z/ [0 N7 _. N' X
0 P% H- P3 X0 D2 }/ \( N
7.至此完成数据交换,继续进行步骤2,直到数据数据有序。! X( K6 w( v, P1 L) U1 j- M4 T5 A
# `. R* j# I$ E! k 执行结果( F- B4 s, n, \5 ]4 {( X0 t/ S
0 `! {, A" p3 |7 P% S+ @
————————————————
+ {7 G, X5 u, P. g版权声明:本文为CSDN博主「大林子先森」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
; |5 K2 c4 P/ H/ p B# }- g$ X; Z原文链接:https://blog.csdn.net/liulianglin/article/details/126741594$ D: \! w: B8 `$ e4 O
o: {0 A& q5 [' d
. C @1 O/ H9 i2 w$ ]1 J4 r I
|
zan
|