- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 564698 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 174632
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 3
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
|---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
排序算法--选择排序(Java实现)# j9 E3 r4 M3 Z) p! U
) d3 e/ p4 Y+ v选择排序概念# a6 N' o" ^4 F! v+ D6 a8 o
选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。选择排序是不稳定的排序方法。 --form baike" n( S* W* W" V/ b$ m5 p
; N, \# K8 v4 P
思想8 @/ c5 y0 C p) d1 j5 e$ c
* 每次从待排序的数据元素中选出最小或最大的一个元素,存放在序列的起始或末尾位置
- B* G" l0 C/ e$ s* 长度为n的数组一共需要进行n-1趟排序,每趟排序会进行一次值的交换;$ f; \, h2 z" f+ V2 n
* 当进行下一次排序时,范围缩小1
; T0 [: t2 G0 T! o4 V
- {, l, _7 ~& q, d+ P6 d代码实现
7 v) D0 T# b* [1 s# Bpackage com.lll.datastructure.sort;/ _; f5 M+ Y- [5 G( N
0 b) {2 @( x2 e8 @& C, Q$ a1 qimport java.util.Arrays;$ ]: G- G1 u; R) o/ p! @% o6 D( `+ P
( r3 h( h( F4 A7 i3 n/**
/ X% e- ~- G, m * 1 p! f r: Z }2 V% m1 t) J* F
* @ClassName: SelectionSort
, u; l) n& ]: a, S7 r: D8 V* R* @Description: 选择排序$ I6 v9 W/ B) W- M; j b
* @Author: liulianglin
6 ?; E( i& s% u* @DateTime 2022年9月7日 上午9:12:13. C/ w4 h1 U0 u4 I. b1 X
* 2 ` u9 l/ D& |/ s/ w: j+ g; h
* 选择排序思想:
# z5 m+ R& K% ^% F5 A. Z3 Z* 每次从待排序的数据元素中选出最小或最大的一个元素,存放在序列的起始或末尾位置( W1 o7 G9 a3 C8 X) [) ~4 N
* 长度为n的数组一共需要进行n-1趟排序,每趟排序会进行一次值的交换;
8 t& j3 ~3 a. s7 M' y" M 当进行下一次排序时,范围缩小1
$ ~, {$ B( \/ ~6 K */# K* r, A, D6 P% I7 a
public class SelectionSort {# U v3 f; N0 N# i; `( H$ j+ T
public static void main(String[] args) {* _. f' Q/ N! s/ H
// 待排序数据/ J3 r3 W' d8 J
int[] arr = {1,3,2,4,7,54,11,34,9};
2 |4 |& d. g/ p3 ^# _% h
5 v* A; T" O" R# o& E$ c* X // 记录当前趟数查找到的最大值的数组下标
' w: S. E; _6 B' w& X; G) O" P9 Y int max;& O1 w$ s* l- H. L9 I. P
, l6 d9 ] `$ I // 交换变量8 k* x' u E# F s+ S' o4 z
int temp;! J1 L9 v1 [+ K+ X5 _( j+ \! f
6 i1 \: _% W1 Z3 o8 b0 T) e5 H
System.out.println("排序前:" + Arrays.toString(arr));
9 S' ^" t2 Y; v ^3 E! s* a& w7 ?5 E f2 I
// 外层控制循环需要排序的趟数
1 L h8 } z9 `; B" l# d7 b for(int i = 0; i < arr.length - 1; i++) {
* a: I, p" b5 t7 [7 H0 E2 u // 每一趟都默认数组第一个元素为最大值
' T' n- Q$ P0 Q8 f+ v max = 0;' j: T y8 t% r3 b
0 X7 R {4 Q& P+ G
// 内循环控制遍历数组的个数(每趟减1),并得到最大数的下标- e' Q0 M) H6 a6 W
for (int j = 0; j < arr.length - i; j++) {' \ J/ B1 M7 d( }9 P) g
if (arr[j] > arr[max]) {- S* E# V! ~ d& ^
max = j;
) n. u! z/ t6 L. T }9 [. n1 ~9 u: c( J M9 T8 l; W$ k
}- d k& ?7 m6 b' {' h8 ]
/ \) l: E: r/ I& ]; g1 w+ r4 g: Z
// 将交换变量设置为最大值, 将最大值暂存一下- l1 m: W0 s" }; E& w* q u: M( C0 \& w
temp = arr[max];
) w# K; C9 k+ L$ w ~0 {+ i# G // 将当前最大值设置为当前未排序序列的最后一个元素值7 f( c, k: }. U& g" p r4 q _
arr[max] = arr[arr.length - 1 - i];' p, ]0 }9 o8 k2 X, }9 C6 J/ w# T* T
// 将刚才缓存的最大值,设置为当前未排序队列的最后一个元素,完成交换
( @4 Q d* I4 |( q) M$ t arr[arr.length - 1 - i] = temp;. m, Y& x. Z4 i+ Z( h: h# O5 h
}
# Q4 S% P; m: X
/ a* Y* ]- O( K y( p1 E, Q+ H! { System.out.println("排序后:" + Arrays.toString(arr));
. X5 c) e7 s/ U" N5 z. u8 V. M }0 ^: Q) e" a& N6 i
}1 z5 l+ m- p# t% X7 M8 b! d6 z' u
! S% _; M0 g* ~% H0 I
关键步骤:& X7 [" p. P! C6 _' T* i
# ?' Q9 [' [; ]2 P3 D7 J# P0 b
1. 首先定义两个变量:分别表示最大值标 和 交换变量;
: D9 m% K5 y. F3 f h7 r: J7 U( Z8 f' L2 e; z7 x
2. 通过外层for循环,控制排序的趟数;
! U$ t. N/ O# N) ^. s7 V7 x9 P$ Q7 t( O% q% T% F* ~
3. 通过内循环控制每趟需要遍历数组的次数,每趟会较上一趟减1,每次会得到最大值的下标。再下一趟外循环会将这个下标重新置为0;( ?0 ^+ x0 m0 C
$ k# g6 W `( L" ~' N$ u! ~( L4. 每趟找到最大值后,将交换变量设置为最大值,目的是将最大值进行一个暂存;
$ j1 i0 u' S0 M* O: z M6 n2 i" w0 x9 f2 q4 k3 {8 t4 f
5.然后将最大值设置为当前未排序序列的最后一个元素;: ` W5 {, P& n( p4 g
: _" @4 l' d" H# T5 |4 E$ O6.最后将第4步缓存的最大值,设置为的当前未排序序列的最后一个元素8 p, `" }* ^/ Z" Z- g' V
" s: L% K) B7 @5 E+ H7.至此完成数据交换,继续进行步骤2,直到数据数据有序。 i6 N, s; S: e1 [' e" [/ [
, T9 l/ p4 w: i3 u6 l# V 执行结果& v+ d& k' L) m+ r
% K+ f$ ]9 K! C/ @6 ]————————————————( m# g M2 I+ ^* l3 ^
版权声明:本文为CSDN博主「大林子先森」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。5 o0 r; ~* s( f; V
原文链接:https://blog.csdn.net/liulianglin/article/details/126741594
$ m% |( w& b( D8 D2 X4 Y. ^
5 d* H' k2 P9 V* W( w
y j( g. S4 P |
zan
|