- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 567260 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 175401
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 3
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
|---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
排序算法--选择排序(Java实现)1 g$ A9 Q* f$ x8 M) D( t i6 W
7 T, \0 R+ l9 @
选择排序概念
) _6 L2 x0 s0 Q7 y- F6 W+ i% N 选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。选择排序是不稳定的排序方法。 --form baike3 }4 z7 X9 v4 S( j8 ?. l
0 n! a0 \4 K! R: @! R0 h9 T
思想
$ K0 E: N2 o: Z$ R& y; P* 每次从待排序的数据元素中选出最小或最大的一个元素,存放在序列的起始或末尾位置
* w9 |2 D8 |) f* 长度为n的数组一共需要进行n-1趟排序,每趟排序会进行一次值的交换;
* u/ ^: O; q& B; |: B3 Q* 当进行下一次排序时,范围缩小14 L: Y9 U/ n2 Q" ^- e& V
$ A6 x: V! ]# V' k# F代码实现
$ Y _6 N, Z- @7 Fpackage com.lll.datastructure.sort;
- O9 M, R' c& b% B6 t
9 z( E& l2 w$ dimport java.util.Arrays;* G) v: j" z2 ?4 {! D8 q3 n
' n4 S0 k; R$ D7 Y/ ?) \/** [9 Y' G4 l' b. C# D/ D* ?, w0 C! K
* 7 _4 s) d3 T3 ?& k
* @ClassName: SelectionSort T" M8 k% p- U) O, K' y/ {& M2 ?
* @Description: 选择排序
N5 v( P. g$ @# B0 n* @Author: liulianglin6 B% Y( X/ k' W/ g/ |( e- h4 E8 x* Y
* @DateTime 2022年9月7日 上午9:12:13
# B, H4 C- m6 [; j# j1 V- H, r*
' l9 v0 U, }1 g6 P7 p: V/ c* 选择排序思想:: l. p& N8 w/ l5 F) O- `: D
* 每次从待排序的数据元素中选出最小或最大的一个元素,存放在序列的起始或末尾位置* K8 }% i: e& B
* 长度为n的数组一共需要进行n-1趟排序,每趟排序会进行一次值的交换;
, O( m: p) G& X( J 当进行下一次排序时,范围缩小1: W% \" N! E9 A0 F( ~
*/
" a/ H% n _8 q$ \2 v% S2 Kpublic class SelectionSort {
, c, P; m1 R. s- j( n& e public static void main(String[] args) {
7 y: U* E S& t, O // 待排序数据; ~0 A* w0 g' q
int[] arr = {1,3,2,4,7,54,11,34,9};
4 r& O/ H5 |3 t& P+ C! x
~, e2 S: c- ]" l/ v' X // 记录当前趟数查找到的最大值的数组下标
$ t8 o/ q2 V% R) h0 D. H5 h ~0 q int max;
4 I# W+ ^' ], h' s: W! L
, k. \+ w$ Q- ]7 ~0 F // 交换变量" Y5 F# E" k! \
int temp;' q D& c; w, _# T
& C2 J' S5 `; Q! h System.out.println("排序前:" + Arrays.toString(arr));; P$ f* _+ q. [1 T% g9 N
- G: P$ `% S6 X* f" i+ n // 外层控制循环需要排序的趟数
* y, f. R' \- }% \ for(int i = 0; i < arr.length - 1; i++) {
\, J5 z q' L" n- O$ Z* l( \( P! B& s // 每一趟都默认数组第一个元素为最大值, W9 m2 n3 c* `' k: H5 e
max = 0;
+ M! d8 k! q9 N; T/ v0 {) V5 f' G
" x+ d/ X/ |9 q2 O/ Y* ? t // 内循环控制遍历数组的个数(每趟减1),并得到最大数的下标: a4 R' [& G" q8 \& I
for (int j = 0; j < arr.length - i; j++) {
8 ^+ I& e9 I8 V if (arr[j] > arr[max]) {4 U1 c" |( c1 v* Y5 H; D9 x( I+ h
max = j;
) m' p! P' `2 M* s# W% n }! x1 b. j" U; R# G* X% L1 u
}
% Z" ]# A% l# R3 g7 C/ h4 G
) g7 y" G! a- s! F+ E // 将交换变量设置为最大值, 将最大值暂存一下
' d& b5 M5 O# N( T; n, g temp = arr[max];: P" S9 T8 }; X) `# j8 R
// 将当前最大值设置为当前未排序序列的最后一个元素值; f2 L9 U# |( \
arr[max] = arr[arr.length - 1 - i];$ B* ~7 J& r* `" P: j
// 将刚才缓存的最大值,设置为当前未排序队列的最后一个元素,完成交换
/ i2 j0 X$ ?+ S arr[arr.length - 1 - i] = temp;6 L6 n$ J; B' I4 a& K( J
}" |* R; h& G+ R! C9 I1 l
t2 C t" D; O, ?, U System.out.println("排序后:" + Arrays.toString(arr));
) ?/ S+ y# H+ C+ S* } }" G3 r0 s5 L4 Q8 v3 r" n
}
, W+ l$ |, W3 H+ L
8 B- B8 E, L& y关键步骤:
' k: _6 }# u% K9 |- I# F/ @
5 g. I2 o2 d. g/ U i1. 首先定义两个变量:分别表示最大值标 和 交换变量;
/ Y# k5 l/ a1 s' ]3 J; P
" d) j( `+ ~7 \* o2 e/ Q2. 通过外层for循环,控制排序的趟数;8 z% Y, ^2 w; d8 b- U
, s- i9 o r& i; ~
3. 通过内循环控制每趟需要遍历数组的次数,每趟会较上一趟减1,每次会得到最大值的下标。再下一趟外循环会将这个下标重新置为0;1 {4 P$ j, k7 m1 n0 u
' \$ s! w8 [) d o. x( I! I# Y- ?4. 每趟找到最大值后,将交换变量设置为最大值,目的是将最大值进行一个暂存;
; x& u5 f/ G- ]1 E3 f' G' e
3 b+ V o5 l! ]5 s: s" M6 }5 R5.然后将最大值设置为当前未排序序列的最后一个元素;1 s4 [6 \/ T, F2 y6 J5 q% ]7 U, q, M
& |3 V% y8 S) ^2 K ]- O. w, o0 Q3 u6.最后将第4步缓存的最大值,设置为的当前未排序序列的最后一个元素 w9 c5 U' m6 e/ o
" g. N2 V/ ^ t4 L5 u: D
7.至此完成数据交换,继续进行步骤2,直到数据数据有序。# @* s! V; g1 A5 `; @/ w8 }, f, k, L
; h$ F3 c! D% Y4 K7 v
执行结果
9 z# @% U z3 K/ |( A
* b4 q; U9 {& [/ G4 i# j) e, ?( a————————————————2 E% v: ?8 y, p3 T/ n R
版权声明:本文为CSDN博主「大林子先森」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。; N0 c2 J+ ` p+ ~
原文链接:https://blog.csdn.net/liulianglin/article/details/126741594 S0 g) c, S. O1 X
- u4 d, t4 t/ P% u1 Q1 j! h m' F
|
zan
|