- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 567269 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 175404
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 3
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
|---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
排序算法--选择排序(Java实现)& j6 f( S2 \: Z& U& ^
5 I" ^* B5 h8 G* Z" R7 e选择排序概念
' r1 s0 A, ~/ v0 x: I S' w q 选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。选择排序是不稳定的排序方法。 --form baike
1 H1 F; Y3 U( [& _& [6 ]; I: D, k; ?; l5 I+ u3 [1 W! H
思想2 o0 \( p& e8 [6 J) G* \ G
* 每次从待排序的数据元素中选出最小或最大的一个元素,存放在序列的起始或末尾位置1 S/ ]- W2 B0 `
* 长度为n的数组一共需要进行n-1趟排序,每趟排序会进行一次值的交换;% g8 J( Q8 T9 S g0 ^ C- r4 M2 l* v
* 当进行下一次排序时,范围缩小17 Y& W8 O+ d, w+ `
. B, C: y6 O) w P4 C
代码实现+ }+ [9 @7 y4 V; j H2 y
package com.lll.datastructure.sort;$ q A* M+ D0 G
3 Q7 b% ]- M" k) g* v
import java.util.Arrays;
# i6 n' b. @" H6 u3 l8 w3 M
7 y' W' P- `+ I3 \) m/**
4 |" A O; F4 I. u6 S; S * ; D( U9 ]' n" k r V' H
* @ClassName: SelectionSort% ]- F0 w' m9 U
* @Description: 选择排序
* Z' Y: H8 w2 O; V' g" A* @Author: liulianglin
* @/ \: d8 c$ T' x# o* @DateTime 2022年9月7日 上午9:12:136 E- W9 d1 j" b; [6 o
*
" N/ y Y) [, ?: w7 G/ _* 选择排序思想:
5 k/ E$ b U8 n( w* 每次从待排序的数据元素中选出最小或最大的一个元素,存放在序列的起始或末尾位置% [; ]+ h6 |) `/ @- U$ R/ O8 W* G
* 长度为n的数组一共需要进行n-1趟排序,每趟排序会进行一次值的交换;
* `, _% l, W+ F: e9 d4 r" _1 g 当进行下一次排序时,范围缩小15 _7 C* Z" o0 {. L8 j
*/0 q# Y9 v: y3 f
public class SelectionSort {( n: y6 }. k) d
public static void main(String[] args) {9 J8 V+ K+ B9 ~7 R, f1 F
// 待排序数据9 J$ ?" o+ x' P8 a9 i! F) q+ C
int[] arr = {1,3,2,4,7,54,11,34,9};
# X& J \* J: S2 }* C7 q5 x
, q+ r7 [" T9 w! Q // 记录当前趟数查找到的最大值的数组下标
# b5 R: t- t2 M; a" s int max;, ]6 \8 r+ M- f# t4 g
" ]6 b7 f7 ]" v9 {; ` // 交换变量
1 p }! `2 Y4 ]% D5 Y7 h int temp;
" s% _/ z/ X4 w; `" [ 6 E4 r# \ n Z1 h
System.out.println("排序前:" + Arrays.toString(arr));
* G' {; M9 g# |. G/ E) h- D7 k& q
" Y5 U' E5 U& c // 外层控制循环需要排序的趟数
0 O. t3 L' D1 \, r for(int i = 0; i < arr.length - 1; i++) {# W2 Z7 h- c- b; p( @" g; v! n
// 每一趟都默认数组第一个元素为最大值. ^+ D0 @; P& L2 g+ R
max = 0;
' I* ?( V* t; y e
6 P! t0 b& A. Q // 内循环控制遍历数组的个数(每趟减1),并得到最大数的下标
# U3 O& p0 R0 p0 u# e for (int j = 0; j < arr.length - i; j++) {
: h* z# P! P0 Z' c/ m if (arr[j] > arr[max]) {; C+ M4 N9 b# v/ b
max = j;
% ^# k( h0 i& I; Q }
( m' W; U! L3 B. P7 M' X }
" A- Q2 h% I% b6 K( P4 q
9 m4 F; ~) i" y$ c* |7 H // 将交换变量设置为最大值, 将最大值暂存一下3 `5 l# q4 T- ` W) m9 q% R* y% T) L
temp = arr[max];* x% r$ V# ^" [$ ^
// 将当前最大值设置为当前未排序序列的最后一个元素值& W) p5 L/ W) [4 o4 u( w0 W
arr[max] = arr[arr.length - 1 - i];
U7 t! E' W/ v- e- o$ ? // 将刚才缓存的最大值,设置为当前未排序队列的最后一个元素,完成交换- o. J) k7 o: ` b/ [
arr[arr.length - 1 - i] = temp;
7 t" p4 D. H. p }
1 W8 |. K7 F, U" u/ h2 s1 z4 D* ]* s
7 R! ~- X+ N/ B' q; G! g! D; D, ]& C System.out.println("排序后:" + Arrays.toString(arr));1 e( m; x; e) T8 n8 _
}
( q: P. H# }, |8 B3 b% G}
9 t! V- {- L, ?6 a- q* s: m1 Z
, t: ^$ @8 |1 N3 G# J关键步骤:
2 n$ u% t* t( k) W' F: n0 n8 O/ j6 h+ W
1. 首先定义两个变量:分别表示最大值标 和 交换变量;
! H- p5 M, g0 G3 B* T9 p. R5 ? r3 J
9 X+ M' b s G/ Y9 H2. 通过外层for循环,控制排序的趟数;
% a3 C9 Z" X0 d' f7 E) j
& y+ J# p8 m7 ~: W3. 通过内循环控制每趟需要遍历数组的次数,每趟会较上一趟减1,每次会得到最大值的下标。再下一趟外循环会将这个下标重新置为0;
s% P) k6 r3 s! D' F, C3 d8 w, |) p; D! {1 d$ _# ]
4. 每趟找到最大值后,将交换变量设置为最大值,目的是将最大值进行一个暂存;
+ o9 I. ]+ p; r0 Y' A1 A6 {$ M5 m; O
5.然后将最大值设置为当前未排序序列的最后一个元素;+ U3 d1 B" l: F) ]# G4 Z8 ?$ e4 G C% d
, T9 y* O. K5 D9 Z" s) j6.最后将第4步缓存的最大值,设置为的当前未排序序列的最后一个元素# ~4 O" I! `6 _/ t
) f# L% H! Z9 t7.至此完成数据交换,继续进行步骤2,直到数据数据有序。
) U+ R3 }$ G8 N+ c9 J8 P" r% a W0 K$ Z8 @5 O q- T; q
执行结果3 g0 k& L: ~& Z" x6 a
+ X w' a @2 J! Z1 I6 R, {————————————————' E: n4 R7 l4 \/ q5 n1 u( { Y# Y
版权声明:本文为CSDN博主「大林子先森」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。+ W, S9 V6 ~5 l- ]! v
原文链接:https://blog.csdn.net/liulianglin/article/details/126741594
0 Y! ^" G1 K. q. p0 X( ]
% ~; `# T% Q! _/ w) f% G
6 {, F: L* i! }1 a; y& X, U |
zan
|