- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 563328 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 174221
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 3
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
|---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
排序算法--选择排序(Java实现)/ D* D x: d5 r
" S% V5 D+ }* e+ y: t: |
选择排序概念& P5 s+ C5 x X8 `) ~) `( F4 [8 M
选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。选择排序是不稳定的排序方法。 --form baike
9 e0 [, e8 P1 Z% c' v: h* M
. s' [- B. s4 _* ]. ~! P思想
1 R- ]" Q9 }5 r% \8 R5 O* 每次从待排序的数据元素中选出最小或最大的一个元素,存放在序列的起始或末尾位置# p6 n7 w1 `/ u! @1 ?
* 长度为n的数组一共需要进行n-1趟排序,每趟排序会进行一次值的交换;
) q; h' i0 u' j/ {. o" @* 当进行下一次排序时,范围缩小18 o5 v: U* h9 J+ g/ ~; Z4 j; h$ b
9 O& ?7 f: d* @5 D, p代码实现
9 S( }) w- v1 x, rpackage com.lll.datastructure.sort;; J/ A! X* h9 Q4 W, F
( C! E7 _- ^$ J- r9 Q* x5 f, ~import java.util.Arrays;: r5 R1 w0 @; Q
$ k' Q- ]) S8 [7 x
/**
7 e; V" d) Q3 s7 H; Y% Y *
+ k+ \1 B4 E; |& V* @ClassName: SelectionSort
}1 z" b' T1 Q/ V0 H: `* @Description: 选择排序
7 n( \2 Y2 k% a* @Author: liulianglin' {% a# x$ d& C& i8 t; F2 L
* @DateTime 2022年9月7日 上午9:12:13
) r! ?9 W$ z+ c; g& S/ y/ b* ( J6 b9 _% e9 g' r& g. q6 I8 h$ L
* 选择排序思想:- J' Z0 J; K& c% d9 X: X6 V/ F4 V
* 每次从待排序的数据元素中选出最小或最大的一个元素,存放在序列的起始或末尾位置
4 z9 z; g! O+ r* L# n* 长度为n的数组一共需要进行n-1趟排序,每趟排序会进行一次值的交换;& y- t* p! Z3 D2 G {# }
当进行下一次排序时,范围缩小18 Q/ y$ P7 g. t* W
*/% l9 h. a, f$ W& b# g; Y' n
public class SelectionSort {$ F' n* S1 v2 M- H- j
public static void main(String[] args) {
# e4 L& e4 ?6 j$ q* M; V. O0 p* c // 待排序数据, t, P v- `2 P' G
int[] arr = {1,3,2,4,7,54,11,34,9};
" _/ v D" U/ U6 T% X& f! z! z( W) J% i . X: O( T+ C! Q c( o
// 记录当前趟数查找到的最大值的数组下标 - I- S6 @. e6 C7 G) q
int max;
1 m) [; N# F7 s3 h: d 8 G; Z6 u9 \: r* q# F3 b
// 交换变量: H+ o6 e' C) m1 `& P
int temp;
" n# ^* c+ n" L9 I) c8 _
) d2 S |1 R* E: A System.out.println("排序前:" + Arrays.toString(arr));& S7 l4 B3 n) J4 x _
' R! q9 M6 x% z4 o1 x" _$ X
// 外层控制循环需要排序的趟数2 r( S8 G3 c2 _" u' D
for(int i = 0; i < arr.length - 1; i++) {! c8 h3 |0 _8 g( ]0 Y1 F( w
// 每一趟都默认数组第一个元素为最大值* S8 e( P6 g) t) f6 @% m
max = 0;
8 c) |2 u! Z* W$ J& [$ {* q6 q
& N, H( `0 V+ \) M& U9 d0 R // 内循环控制遍历数组的个数(每趟减1),并得到最大数的下标" k' v* A9 B+ o; k$ ~: N4 b
for (int j = 0; j < arr.length - i; j++) {
) ]# K/ f- [: m if (arr[j] > arr[max]) {
4 L0 W) q' n) D2 |7 @" A max = j;
9 h5 G0 M7 T# |2 H& l: b }
& y6 p+ L8 A/ D T; J. ^' F9 o. t }" w; V$ |7 w- X3 {; R2 i
, f% ?; B. `1 A$ k
// 将交换变量设置为最大值, 将最大值暂存一下$ E6 C6 k0 B7 T( P( m% T3 @
temp = arr[max];0 _8 J& L' o( m. K7 }" v
// 将当前最大值设置为当前未排序序列的最后一个元素值* n/ y, Q- x8 r6 t' h1 Q4 W
arr[max] = arr[arr.length - 1 - i];
* _ t; n1 E# G, d' q! Z' e // 将刚才缓存的最大值,设置为当前未排序队列的最后一个元素,完成交换2 c, L# [6 ]) @, ?5 N
arr[arr.length - 1 - i] = temp;
6 J q. d1 Y) J3 H# ?" s }
9 O' \. y* Q7 R4 ]$ K% K2 U* ?
* J% r8 E `! y) n* | System.out.println("排序后:" + Arrays.toString(arr));
) Q$ t* l* U, k, `; b; k* q2 V' J }( j% b3 E O( p) F8 M2 W" |- f
}
& c, V! M" {$ J; h5 k3 H7 ?, ~2 Y& i8 u% }) c% o7 {0 O/ @+ N+ \
关键步骤:5 R; i1 f3 q5 ~' P
3 ?+ N0 l& t8 a% Z2 o9 }, _7 u4 l1. 首先定义两个变量:分别表示最大值标 和 交换变量;& l5 _) t% b; d0 a% k
5 Q1 e3 }" z. p% c6 I
2. 通过外层for循环,控制排序的趟数;& Z I$ V. }* C& p0 A
" p4 A9 l6 K! ^$ P
3. 通过内循环控制每趟需要遍历数组的次数,每趟会较上一趟减1,每次会得到最大值的下标。再下一趟外循环会将这个下标重新置为0;+ y8 [. f6 g* J
9 o+ b3 S3 \7 E3 z
4. 每趟找到最大值后,将交换变量设置为最大值,目的是将最大值进行一个暂存;* W1 [+ ^1 Y' Z9 J m5 X
) g2 g$ W# s2 ?5.然后将最大值设置为当前未排序序列的最后一个元素;! J4 E' V2 w/ A1 t
9 m" G+ j9 _/ { ^3 e- [1 k
6.最后将第4步缓存的最大值,设置为的当前未排序序列的最后一个元素
r! H0 Y- v- N3 t6 D2 e) h3 d3 q4 y ]- @) l
7.至此完成数据交换,继续进行步骤2,直到数据数据有序。
, T; O2 M0 O1 H3 C# c r0 z5 b% Q. f1 J
执行结果
0 O z$ Z' ]& J) G7 b% L( t. T% D4 r2 I* u/ Y/ U) G
————————————————7 t- ]# f, ?. a/ M6 Q
版权声明:本文为CSDN博主「大林子先森」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
2 c- p$ s# F+ X1 G7 L原文链接:https://blog.csdn.net/liulianglin/article/details/126741594
+ a5 t2 `: E/ ?/ H! \, k: J$ j1 e/ G8 U& P, L3 b
" N5 D9 j+ I8 o( k8 q) I
|
zan
|