- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 565619 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 174909
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 3
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
|---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
排序算法--选择排序(Java实现)8 f: ?8 ?5 a5 b- Z5 `& }
3 p$ U$ l' b% w6 J* `- L, q- N选择排序概念
# F8 V, K$ {8 S. r ?& N8 A; ? 选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。选择排序是不稳定的排序方法。 --form baike
. R3 I y6 C0 ?- B# m+ l
# B3 X2 S: T% I, d思想. `0 t; v% C1 z/ W9 Q
* 每次从待排序的数据元素中选出最小或最大的一个元素,存放在序列的起始或末尾位置
9 w; w% H/ i6 g3 w2 u* 长度为n的数组一共需要进行n-1趟排序,每趟排序会进行一次值的交换;1 ^" z' t9 I( r3 {3 Q8 f
* 当进行下一次排序时,范围缩小1
- z0 P8 r5 c% u& ?# u1 X# Q
; r4 P) V: E* `$ ]代码实现
% {, r' j% T. v3 b& jpackage com.lll.datastructure.sort;
4 V8 `5 R8 [- b2 _) v% t6 j
" a% I0 g1 F- q' ^( ~; T6 ^% cimport java.util.Arrays;; h/ S/ ~0 @$ l2 {& \
2 `: u2 l( v5 c' b- B/**7 }$ `2 V; s, \. W
*
4 \4 l7 h8 b. H* @ClassName: SelectionSort
* T, Q* A7 @8 M% p4 L$ b$ c* @Description: 选择排序
# V$ w# Z! g" Q/ X; Y" a" m; g* @Author: liulianglin
* t7 k. Z, o6 J; o# f6 y1 i' k w2 h* @DateTime 2022年9月7日 上午9:12:13
' M7 i( D8 k1 P+ R/ j& m*
3 F( C( o6 e* V, m! \0 ^' P0 P* 选择排序思想:: p: X& I' {! K5 N7 g5 `
* 每次从待排序的数据元素中选出最小或最大的一个元素,存放在序列的起始或末尾位置
7 c. x- U) e( G' V) J* 长度为n的数组一共需要进行n-1趟排序,每趟排序会进行一次值的交换;( q% @( w3 O) U- |
当进行下一次排序时,范围缩小1
1 ]1 Q3 E8 K& t7 ^. R9 f& j5 m *// ~ ]" i: w* G6 }3 I7 t! x8 e k& g
public class SelectionSort {
) B: Y) e; z. ?1 f1 W- v4 {3 P8 A0 a8 w public static void main(String[] args) {
) I/ \7 A9 ^9 f // 待排序数据5 p( L) J( m/ K6 `5 h/ D) _6 Y
int[] arr = {1,3,2,4,7,54,11,34,9};
3 a& w$ W& e; u) V( M2 E+ j4 B3 A
E+ Y: ^; r+ v1 h3 h7 D // 记录当前趟数查找到的最大值的数组下标
$ J) |1 c- B: i" d& E8 Y int max;
6 O C9 a- x F8 w6 e
) c, b6 h/ I: U- ]; V$ q // 交换变量
! m U& w* G- V+ }6 M int temp;" v2 v' C+ E* Y) |0 G- ~9 f
5 L0 K0 |5 l2 d5 r( u& R System.out.println("排序前:" + Arrays.toString(arr));' O) s6 y6 O& S& b
& A* g, `/ P; @2 { // 外层控制循环需要排序的趟数
& a* ?6 w+ B$ \ ~ for(int i = 0; i < arr.length - 1; i++) {
# r$ r* p7 k0 \# _- X( {; G // 每一趟都默认数组第一个元素为最大值
; Y3 ?+ r5 N) O) } max = 0;0 r4 R2 F$ D& {1 v* h8 g
" L/ l5 }5 V& ~8 y( G4 ^8 M @/ g1 E // 内循环控制遍历数组的个数(每趟减1),并得到最大数的下标& d) j/ o. U: A: `- n. C# ^
for (int j = 0; j < arr.length - i; j++) {1 {: i; ]7 x0 q# Q2 Y, j5 k2 G
if (arr[j] > arr[max]) {
& S+ j; R. o$ B max = j;9 t) ]" H' K; }7 E1 C
}
; Q# N' J' y% e6 O }* N- w0 m( |5 N2 f @6 g$ u6 s
9 W8 b& |$ S* }6 ^$ l
// 将交换变量设置为最大值, 将最大值暂存一下
- l8 ]) R- D' X9 n temp = arr[max];
, y! I7 L3 M) @% i( R // 将当前最大值设置为当前未排序序列的最后一个元素值
0 p1 p( ~( D* B3 y9 F, U9 q* ~. D arr[max] = arr[arr.length - 1 - i];1 }$ o* D2 p" ^' c' K- S; t
// 将刚才缓存的最大值,设置为当前未排序队列的最后一个元素,完成交换
" s( z w6 D3 K# C z arr[arr.length - 1 - i] = temp;
( v$ A7 C+ K# X }
: G! \. x5 {4 Y7 O
( U$ C/ E4 ~3 W) Y x) I3 Z System.out.println("排序后:" + Arrays.toString(arr));% ], z, s2 L% Y" Z% U& Z8 {4 X
}
" ], H) B9 J* w! T% A2 G. u}
/ o" l) G* `6 P0 E
" C( ~; j: K+ ?' N* ?关键步骤:
2 U4 _# E6 ~$ k% g. v4 G0 l$ e' E; O( I
% Q1 I0 h' _: r- B* P0 [4 m1. 首先定义两个变量:分别表示最大值标 和 交换变量;
, o6 R1 t9 T# O- Y8 V- Y' X" r# E; ~( i0 d- G4 o' ^
2. 通过外层for循环,控制排序的趟数;$ @, R7 B3 O6 ]
$ V. ~2 I p* W/ z
3. 通过内循环控制每趟需要遍历数组的次数,每趟会较上一趟减1,每次会得到最大值的下标。再下一趟外循环会将这个下标重新置为0;
# j" e/ q, i! a: m$ J7 [+ o
% }7 F2 |, _7 p4. 每趟找到最大值后,将交换变量设置为最大值,目的是将最大值进行一个暂存;
3 Y" }4 Q! O7 b M: o) l' q" d. c9 F7 \7 U- ]
5.然后将最大值设置为当前未排序序列的最后一个元素;) z% \5 H2 \; Z( ^0 y" B( X3 p
8 s; H7 p n: B1 O6.最后将第4步缓存的最大值,设置为的当前未排序序列的最后一个元素
( [* ]5 C9 M5 L- M; M8 o! c5 K/ u# G+ d: p$ g R* B/ d
7.至此完成数据交换,继续进行步骤2,直到数据数据有序。3 s) R) b z$ O7 j
: L9 H, `! _) z9 p2 T
执行结果
0 W8 `9 ?; L6 h6 U
& R: Y8 w( Z1 M————————————————) W0 Y W G7 G n( c! I" i- Y2 a9 n% G
版权声明:本文为CSDN博主「大林子先森」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
: |! v* m+ h7 k R* F j原文链接:https://blog.csdn.net/liulianglin/article/details/126741594; g( W7 I3 P5 {: H$ y
2 P* v5 ]2 P; I# J8 }; v# U0 F& ~' U. ~ |
|
zan
|