- 在线时间
- 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实现)( D1 i7 i9 k5 l# P. O
! O$ v6 d% s* o6 V/ C4 o
选择排序概念
! d& @! e) l+ t$ D R 选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。选择排序是不稳定的排序方法。 --form baike/ P. L \$ Q) M4 ~/ N% {
3 m8 [5 n! r& T
思想
! _) Z3 v' U8 _& d* 每次从待排序的数据元素中选出最小或最大的一个元素,存放在序列的起始或末尾位置
0 ~0 m2 M9 s$ s, ^( A0 g5 o* 长度为n的数组一共需要进行n-1趟排序,每趟排序会进行一次值的交换;
0 U# ^3 a) C$ f8 M. ]* 当进行下一次排序时,范围缩小1
( {. ?; Y* l& @! N% @0 M4 ~$ t* P P# j2 `: H2 r1 }% ~3 B7 i
代码实现0 P" b6 X2 j4 x' @% c, N6 Y1 M/ b
package com.lll.datastructure.sort;* x, s+ ^% l7 P" c6 b6 F8 h
% L7 e8 N4 @( u0 c% Qimport java.util.Arrays;
' C3 O) n& B% t3 C: h. [/ O' @& w2 o; \$ b: e) F" I3 ?
/**) j5 {5 C$ X3 a2 \2 k9 E
*
& |7 b2 j$ J, C: i/ d, y; J# H* @ClassName: SelectionSort: B* U N* c5 s7 e0 V* ~
* @Description: 选择排序
; m( }, r8 I0 q) s5 J h5 [* @Author: liulianglin
7 Y3 A- j- m' e' S2 f7 {, _( ~* @DateTime 2022年9月7日 上午9:12:13
) N @/ `3 N9 J: ^) a& E*
: ]# ? G) ^+ J- ?* i* 选择排序思想:
1 L9 R! C8 s+ x1 `* Z* 每次从待排序的数据元素中选出最小或最大的一个元素,存放在序列的起始或末尾位置
0 o w: \( _( o5 s2 j9 g2 j* 长度为n的数组一共需要进行n-1趟排序,每趟排序会进行一次值的交换;4 X/ n) n4 y6 a6 W* {5 A' [9 r5 }
当进行下一次排序时,范围缩小1! \* k/ ^; l# _
*/& p& _/ B, d$ h) b: \
public class SelectionSort {
" L: l3 g/ G6 _0 _5 _, ]; w7 L public static void main(String[] args) {6 D. k4 Y. b& K A$ U1 ?
// 待排序数据& f% X/ a, _: [6 f! Q# q6 r2 e' Z
int[] arr = {1,3,2,4,7,54,11,34,9}; ! L' S" G" O v# M' E
0 j* @* A; T- F* W
// 记录当前趟数查找到的最大值的数组下标 ( v" H* ]$ k* \
int max;/ E7 \# L5 V0 s- B( L6 Y3 b! }
?3 v/ j, i. h- @ ?
// 交换变量
# b9 @! D1 N# z int temp;
. N! @9 J0 i) |, e k2 u' n
0 j, A4 V. q, E4 M- u. S System.out.println("排序前:" + Arrays.toString(arr));* h' m, q$ C3 y
6 r% c) d' T+ {; p U- c
// 外层控制循环需要排序的趟数; P* U2 g/ ~ r5 ]! ]0 c% g1 I- F
for(int i = 0; i < arr.length - 1; i++) {6 m; R) Q* B; K5 \) W7 P
// 每一趟都默认数组第一个元素为最大值
8 S/ y6 \# Q' \7 A. c max = 0;
+ O% z- H- e- A" _' M' c
* K* P! L/ ]1 s# {( k // 内循环控制遍历数组的个数(每趟减1),并得到最大数的下标
2 {3 ]: C$ k! ^- E* L6 P for (int j = 0; j < arr.length - i; j++) {
( o: s) B3 c, h8 n6 ]" u1 x, C6 X if (arr[j] > arr[max]) {
3 X' H7 D: k; T max = j;: q3 ]7 k. O$ f! b2 |* w
}/ v2 D- B7 a$ `' @- p% E: B: L
}& Z4 P7 O3 k& d4 D
: {) s- b# A& ?% i8 E9 w7 M7 O. E // 将交换变量设置为最大值, 将最大值暂存一下
3 {# V) Y; S$ I: l temp = arr[max];
% | J+ h( z" K2 j, {+ t // 将当前最大值设置为当前未排序序列的最后一个元素值. O3 X1 S3 n+ i M1 X4 W
arr[max] = arr[arr.length - 1 - i];
$ R/ w% ?9 J5 d // 将刚才缓存的最大值,设置为当前未排序队列的最后一个元素,完成交换, j, x/ o* U, z. y& T8 d4 C
arr[arr.length - 1 - i] = temp;
6 g& \0 L, l5 w8 y* K& m+ ?* I9 F }% B9 b" G; S$ d
! S' W9 ^2 T6 _/ C H; I+ H3 b System.out.println("排序后:" + Arrays.toString(arr));
7 U+ E Z/ V2 b }
/ }, O% D, G$ I/ W}% ~& a A) x; ^7 ]
) u1 `! W7 s+ l* p
关键步骤:; _3 E8 i2 G4 O! Y: G# c+ o3 g3 b
# ~) k6 F7 ?. ?3 I% X4 p
1. 首先定义两个变量:分别表示最大值标 和 交换变量;; `' t4 T' Q& p6 r0 a
. F3 Y3 |7 e1 {9 `; `/ u8 B7 I
2. 通过外层for循环,控制排序的趟数;
+ e8 I `# i- Z) \
4 Y5 ?1 k& Y9 m" F" b. _8 B' g3. 通过内循环控制每趟需要遍历数组的次数,每趟会较上一趟减1,每次会得到最大值的下标。再下一趟外循环会将这个下标重新置为0;
' {# g; K# m# c5 p/ F+ Q' p) C6 S" `4 C' c8 m# o2 Q
4. 每趟找到最大值后,将交换变量设置为最大值,目的是将最大值进行一个暂存;
5 S% T v5 N! g( O6 n- P% Z6 w8 f- h) k, w% Y" X1 d
5.然后将最大值设置为当前未排序序列的最后一个元素;/ |: X& E0 y3 b* h9 w5 Z# O% d; A
$ `2 p9 ~; K' i. w6 \$ q" o, C
6.最后将第4步缓存的最大值,设置为的当前未排序序列的最后一个元素6 k* O" I" p1 u( P7 C" B$ m6 e
s0 G5 A) ?+ p5 V8 t3 h T# \
7.至此完成数据交换,继续进行步骤2,直到数据数据有序。
8 W% D# p: a" d L- B' L, j9 X. g9 P. j$ ~3 x) x. ?: ~! q
执行结果
+ I6 o0 z. P" ^& C0 z/ \4 Z0 P9 F/ l3 G: d$ \% t
————————————————
/ t0 Z5 e% B) h) q版权声明:本文为CSDN博主「大林子先森」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
4 B; g8 u( U$ y原文链接:https://blog.csdn.net/liulianglin/article/details/126741594+ @' `$ X! F& E, Q6 |) v6 p
1 ?( V+ z0 I3 u, T3 d
" Y) `& V9 f4 q: A5 }5 ~
|
zan
|