- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 563283 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 174208
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 3
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
|---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
排序算法--选择排序(Java实现)0 j' b, u6 r! |+ {5 {& ^ W
. o! k8 g7 ~0 F: k! m
选择排序概念4 L' t( K5 S3 F
选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。选择排序是不稳定的排序方法。 --form baike
/ @( P8 X8 { h& f- t6 u5 E6 }$ T9 @0 ~
思想
1 ^" `2 q+ u8 V$ V( A5 }* 每次从待排序的数据元素中选出最小或最大的一个元素,存放在序列的起始或末尾位置
1 j9 W" h# ]( x' E9 N$ E* 长度为n的数组一共需要进行n-1趟排序,每趟排序会进行一次值的交换;
* z9 L+ S! K6 z" l! X9 o% K* 当进行下一次排序时,范围缩小1
) R& e, }9 {8 `& |. m7 L
# D) P; f) K1 E8 ?) K% B代码实现- U; q! z* Y- `1 d
package com.lll.datastructure.sort;; t1 H! y0 ?$ X$ G8 k# K' }/ @
3 _ q$ Z+ m% c# F" @, G
import java.util.Arrays;
( J1 R! C" N! V, x/ e
0 M) c" o3 u7 J6 X9 P& n. H/**
; k `) y0 G1 ]% }2 a *
- i4 w4 ` X1 D/ K, J2 |* @ClassName: SelectionSort
1 T% B1 j% G/ X( V* @Description: 选择排序- P; j7 ~* ~) Q1 H" p6 ^$ |
* @Author: liulianglin
% `& U, H0 W, d: Q* @DateTime 2022年9月7日 上午9:12:13 {0 k: F8 f, y) r7 D; ]6 L/ K
* 9 \& |% L8 Q$ Q+ S5 r A- g, i1 a" |5 G
* 选择排序思想:8 j% o9 D7 `; O# x! J, B9 j8 r
* 每次从待排序的数据元素中选出最小或最大的一个元素,存放在序列的起始或末尾位置
8 P: p* x7 v9 U' u* 长度为n的数组一共需要进行n-1趟排序,每趟排序会进行一次值的交换;* N3 F: x( ? d3 Z
当进行下一次排序时,范围缩小1
) q3 i) u% Y% |& w k */
- H+ G/ C/ C/ c( O2 vpublic class SelectionSort {" l. u& k" e9 v$ }
public static void main(String[] args) {+ E$ r9 x. H4 V; y5 e, E
// 待排序数据7 G0 a* M7 u6 n4 @& o: r" q3 A$ w2 |1 ?/ I
int[] arr = {1,3,2,4,7,54,11,34,9}; & U: o; i( N% j. I
- E0 r8 ]5 d4 ^) q$ s% u |
// 记录当前趟数查找到的最大值的数组下标 r" P. y$ y4 ~9 \9 u0 X3 w: y$ K
int max;
! s8 v- ~, ?) F1 S% u, Q. g
5 j) ^: z' V0 G // 交换变量$ F/ M. ?4 r' G
int temp;
5 ]9 N# V* p/ K5 |5 ?" l : ~) D2 ]; R. B# C; v6 I
System.out.println("排序前:" + Arrays.toString(arr));
5 V) |) a4 n6 Z4 J
9 ?5 C& w) N. {- R, r; x& g& V // 外层控制循环需要排序的趟数
6 n* \6 L& I" u( Q. t1 C for(int i = 0; i < arr.length - 1; i++) {
9 B( ~; p( A7 M- y4 d2 | // 每一趟都默认数组第一个元素为最大值: b/ R& U! g% r3 j$ l
max = 0;
) G0 Y) L. h3 V0 Y) U# g+ w1 M& l& t
' z/ V1 J$ C: O // 内循环控制遍历数组的个数(每趟减1),并得到最大数的下标
/ E0 }- {4 d% T0 M0 s for (int j = 0; j < arr.length - i; j++) {1 ]; }% Q2 r% `$ G# n
if (arr[j] > arr[max]) {
/ U) C/ _! q# E" o7 B7 q' s max = j;
0 n) i2 @# Y; b }
+ `2 x; y, g+ x( T+ Z% f }
' y" T$ B7 ]0 H7 @
- a& H; y2 m; z/ `6 n( F$ k // 将交换变量设置为最大值, 将最大值暂存一下; l# E! f+ }, O F/ d7 i; N
temp = arr[max];
8 V0 r# z( Y7 m6 n% ` // 将当前最大值设置为当前未排序序列的最后一个元素值
Q' ~) H' c! m- G% }2 i; \( J9 _% m arr[max] = arr[arr.length - 1 - i];
?, ?' D5 _# Y+ B/ X$ q5 y; M // 将刚才缓存的最大值,设置为当前未排序队列的最后一个元素,完成交换
6 e3 U+ F: P3 X2 X; r7 s5 o arr[arr.length - 1 - i] = temp;6 ^- h) @' H' w. L5 c$ a
}
d1 D% x( q" O# P5 z" q, N- c" r
+ h+ @: J6 A+ ?4 Q4 O) E1 H System.out.println("排序后:" + Arrays.toString(arr));
v5 f: {- e, S3 o5 U- s* W6 F }
3 _% H4 Q5 v. H3 Y& G2 @; ]}
9 s+ r0 m7 z# S8 ?% N, F9 Z
+ A3 c6 U: k- g' S. w x# h关键步骤:
- [ A N- t4 E% C
; p# h: p# J1 T- ^1. 首先定义两个变量:分别表示最大值标 和 交换变量;
' A# P) v: W& E3 X
: o4 V: W, T: s$ F# e) J6 e s2. 通过外层for循环,控制排序的趟数;
: |/ }4 L/ }2 |: u2 u& p; e0 M" f) {$ D* I5 ~
3. 通过内循环控制每趟需要遍历数组的次数,每趟会较上一趟减1,每次会得到最大值的下标。再下一趟外循环会将这个下标重新置为0;
4 m$ Q9 A* {- h$ y6 Y2 ? n4 _0 S' Q) Y: B2 y
4. 每趟找到最大值后,将交换变量设置为最大值,目的是将最大值进行一个暂存;
( q6 f& ?$ w5 N, r) N, G5 `
5 V$ m7 y# t! K3 @# ]9 e3 f5.然后将最大值设置为当前未排序序列的最后一个元素;
$ F( ^5 S% Y% u, n9 K( W' }6 A7 Y, X7 `' }' V. p- h
6.最后将第4步缓存的最大值,设置为的当前未排序序列的最后一个元素
7 u; \4 f! s! s5 E0 z# }
$ I+ Z7 _! Z( \: r3 n7.至此完成数据交换,继续进行步骤2,直到数据数据有序。3 e% m& A! E8 t- {, F4 X j& w
9 l4 m5 e6 O4 [2 |! h) p. l+ s 执行结果% `; a( ]" ^0 O
* F- g4 E7 o0 }. s————————————————
+ ]8 F2 n& O0 P/ u' h+ J版权声明:本文为CSDN博主「大林子先森」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
$ c+ r1 }* b7 ^原文链接:https://blog.csdn.net/liulianglin/article/details/1267415944 j2 F" @( b' R; h$ r. U
9 b9 s) r) W, B$ {1 H2 W t8 k/ S. a! M/ @3 \7 C0 k+ u* z
|
zan
|