- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 563309 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 174216
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 3
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
|---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
排序算法--选择排序(Java实现)2 _$ F6 W( F* B) f5 `3 ~3 V
$ u& d& c! Z0 I; e& k1 L选择排序概念
( t$ O. [: t% @2 {# T9 n0 H9 Z 选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。选择排序是不稳定的排序方法。 --form baike4 r/ v4 y) I# E6 K3 j, [% x
1 C+ s6 h' B9 L, C8 {. r3 K. @7 j
思想3 g" \% }! v/ y9 X- n0 t# {6 @
* 每次从待排序的数据元素中选出最小或最大的一个元素,存放在序列的起始或末尾位置+ L/ _! \3 a$ ?2 e/ U3 Q
* 长度为n的数组一共需要进行n-1趟排序,每趟排序会进行一次值的交换;4 B1 O {' f4 W: r; B! m
* 当进行下一次排序时,范围缩小1
. k- ~( P! `* K( I1 Z
" G% U8 G- Q& v' k; p代码实现7 c- {6 ^ H: j5 ~ e7 c) r
package com.lll.datastructure.sort;
- p- g. m( n. E1 u3 s8 Z7 i# \$ ~; x' w9 F
import java.util.Arrays;
7 {( n/ a% [9 ~9 x0 L7 M
5 L0 Z3 ?: \: q$ J' r+ L/** f. P* M+ G. e
* 8 s3 @0 D8 I, J* E: U
* @ClassName: SelectionSort
c3 n/ h9 S# }) u$ s! }' C* @Description: 选择排序
) s8 U0 O, ?# K$ y- A0 H/ O; A: w" `* @Author: liulianglin
+ P. H& K$ r" H- G2 m- U% R* @DateTime 2022年9月7日 上午9:12:130 S( ]) t( Z( a, L, w+ k
*
8 s8 g# a8 U0 t: z( _8 Y0 R2 V' u. _* 选择排序思想:: N, Y9 L, \$ @6 w( s1 {: W
* 每次从待排序的数据元素中选出最小或最大的一个元素,存放在序列的起始或末尾位置
9 I0 i+ T! e* ^0 b* 长度为n的数组一共需要进行n-1趟排序,每趟排序会进行一次值的交换;
- p) l9 @* e4 r, W- H/ ?, k, f+ U 当进行下一次排序时,范围缩小1+ P! ?, a* S8 x- N" m: j
*/
& t" L2 M$ n$ a8 u& t4 d- ]2 \) A! e% epublic class SelectionSort {
$ w/ u) r9 U6 r# w+ S public static void main(String[] args) {- t7 T" F' h3 d7 J! n/ {9 W
// 待排序数据. ^# [, |/ A9 g* Q- N1 F( ~9 _' p
int[] arr = {1,3,2,4,7,54,11,34,9}; ' p1 D: I* i2 U H
5 {) }1 ]: L+ H- F* m8 J, I0 j% x
// 记录当前趟数查找到的最大值的数组下标 # x: C( \ T% z& \. k3 L
int max;
! c( ?0 r: b# X! q# ~! r % V& H2 W1 I) Y6 _ |
// 交换变量" e7 m( V7 Z7 B* F) C
int temp;
- C9 N, I/ _' G. g0 m% X : H P- p, u/ R5 i* Z# {: S
System.out.println("排序前:" + Arrays.toString(arr));, x7 ~8 h: n5 T
- X$ B( l# J7 d/ b
// 外层控制循环需要排序的趟数% R7 U7 Z. ~ u8 o a" F; x
for(int i = 0; i < arr.length - 1; i++) {
1 j; J$ {) \# |, X // 每一趟都默认数组第一个元素为最大值. w/ K. H. v" ~
max = 0;
2 b% J* V6 J1 q & V3 l& k0 b* a! ~7 e) S& Y5 z
// 内循环控制遍历数组的个数(每趟减1),并得到最大数的下标8 }, }2 E& c2 j# d: e; w* E
for (int j = 0; j < arr.length - i; j++) {# k# m% _5 ~/ p' S8 @
if (arr[j] > arr[max]) {" i2 u7 ]; e g1 K+ w
max = j;+ ]$ o* g3 H- Y
}& ~8 D( Y+ p- p: i7 d- C! N' U
}
8 K/ H! {5 F. |& L, S) W% W
& y9 {' F. J6 [( z: g' ?7 M4 d // 将交换变量设置为最大值, 将最大值暂存一下
1 ?/ _: Q( {- o0 Y- e7 T* }. J1 n# ?* E temp = arr[max];
* J1 e' Q! }* c; h: }- F // 将当前最大值设置为当前未排序序列的最后一个元素值; d9 w# a5 P7 X4 B0 Q
arr[max] = arr[arr.length - 1 - i];
& P% B3 `9 c( o // 将刚才缓存的最大值,设置为当前未排序队列的最后一个元素,完成交换
" W+ \* e: y1 h7 m4 {9 \, @ arr[arr.length - 1 - i] = temp;
7 Y9 D- Z# X# |* g" L4 Y$ g }7 p& E9 l' p' v2 W
1 x. S& m6 N, B
System.out.println("排序后:" + Arrays.toString(arr));( K% Z: g% }/ |' Y9 _& _
}
, U: b2 Q" X7 J* f}
) H; b7 _0 r& E0 s) u
" O: v3 i2 E5 G) D8 K) S2 h0 o S关键步骤:. i" A4 J+ g9 i3 L- \, Z* ^% u2 ]+ V
+ x$ B R( @! x6 ~! n- d L2 e1. 首先定义两个变量:分别表示最大值标 和 交换变量;6 \7 ]5 E" q1 Q" _8 G7 r
3 X- ^3 q7 S* r. B; f2. 通过外层for循环,控制排序的趟数;( q) ^1 s" {: A6 m
1 H( \ a6 a& E7 x( i3 X3. 通过内循环控制每趟需要遍历数组的次数,每趟会较上一趟减1,每次会得到最大值的下标。再下一趟外循环会将这个下标重新置为0;% x0 p+ }: I9 R0 _4 {: ^; I
# W* M M+ [6 @1 G& E+ w* i4. 每趟找到最大值后,将交换变量设置为最大值,目的是将最大值进行一个暂存;$ m x2 r/ R, l5 H5 D d, g
. u9 p5 O6 ~! r& w5 k5.然后将最大值设置为当前未排序序列的最后一个元素;
/ Y9 s* ^( V/ q3 t' N8 j! C; @8 c% a. g8 l" m2 }
6.最后将第4步缓存的最大值,设置为的当前未排序序列的最后一个元素' V ~8 q# f. m9 l7 E
& }0 C. s U" u' A8 [: m3 O' u
7.至此完成数据交换,继续进行步骤2,直到数据数据有序。2 \% z" o% c4 }5 |/ t0 Y) K9 V9 T
& c9 i- k5 [6 _3 h0 u& ]" @7 o @. { 执行结果
: u" b G1 O' P( ?' y) T4 B+ d$ j$ B4 C
————————————————# b' p& v2 |) {$ ^- x
版权声明:本文为CSDN博主「大林子先森」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。- V3 i; |3 k# `2 w
原文链接:https://blog.csdn.net/liulianglin/article/details/1267415940 \# M7 R* |3 i( }9 F: J4 a( I" ^
* i7 Q7 V0 T1 t" D5 M% x. T/ S: @4 R4 l. g& w1 K
|
zan
|