- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 565611 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 174906
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 3
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
|---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
排序算法--选择排序(Java实现)$ P' W) w, b$ d0 U) O& G* @0 p" \
9 K) B4 G, A6 f- ^: y# R& D+ q( M
选择排序概念% ^% x2 m9 q& e4 B/ L: Z
选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。选择排序是不稳定的排序方法。 --form baike8 g3 u$ r4 Q k
( G9 |% B m+ ~9 Y- G. s% Y: X1 K
思想
1 T0 f# f- W, f, d! Q8 O, I* 每次从待排序的数据元素中选出最小或最大的一个元素,存放在序列的起始或末尾位置8 l) a, v9 f5 u1 l3 q. D1 B
* 长度为n的数组一共需要进行n-1趟排序,每趟排序会进行一次值的交换;! Q! S$ B' F- c( w }
* 当进行下一次排序时,范围缩小1
3 d! W% \/ m) P# x& F
% s. e$ B1 I' n5 `5 i9 z& ~+ v代码实现0 ^4 h2 W- @: ]- t" P
package com.lll.datastructure.sort;
+ c2 u5 n. E6 q& w! E: ^, _* h' N( Z" e B) _: k# P+ R3 S
import java.util.Arrays;; J) v8 ~* R4 ~5 ^2 T2 Q
1 m5 {' O, k# o2 [/**; G# E. C* O! M* ?- u, r0 O5 |
*
* X( @- X* I( j4 l% S2 `& b! a* @ClassName: SelectionSort4 u4 f4 G1 W% |
* @Description: 选择排序
. o7 a! X, {: |2 q) C, X* @Author: liulianglin
0 ^- k# `* Z; |* C! |* @DateTime 2022年9月7日 上午9:12:13
' W1 v! |- ?$ X$ l: {" v*
9 S; \; B2 k4 {5 ], t* 选择排序思想:
% ^7 n; P6 @$ Y) @1 t. Z. L; G( X* 每次从待排序的数据元素中选出最小或最大的一个元素,存放在序列的起始或末尾位置
- `' y0 f- \# Y2 u" D8 r* 长度为n的数组一共需要进行n-1趟排序,每趟排序会进行一次值的交换;$ [9 h% ^. h, F1 ~2 Z# Z+ V; b
当进行下一次排序时,范围缩小1
( O9 y! L) X9 l/ v" D */) S% U7 c- s/ I+ y
public class SelectionSort {! E' d" ?- Q7 _5 @/ W8 Q" Z9 F
public static void main(String[] args) {" `6 W* k5 h; o. \% L1 V
// 待排序数据' s7 B$ ^( ?( {2 }7 e8 s+ v$ o
int[] arr = {1,3,2,4,7,54,11,34,9};
- U: R5 w8 Y* s! U& N2 ^. D5 f3 m& b
6 @3 ^6 }5 C; `. U) m" Z1 y // 记录当前趟数查找到的最大值的数组下标
' Z4 E: f, K9 o% c9 a2 g int max;
! I4 ^& C; r' n2 V0 ~* u1 H4 _
$ s# }0 I7 r8 @! L // 交换变量( Z6 s5 N" T3 ~9 g* k$ `
int temp;
! n7 q& Z# ]5 d! p: C# v " y3 u7 R, n4 ~
System.out.println("排序前:" + Arrays.toString(arr));6 |& V: i/ X3 k
% i' x P% i% d/ a
// 外层控制循环需要排序的趟数
( M0 r: m3 f* c4 x# ^- K1 W for(int i = 0; i < arr.length - 1; i++) {( o& f5 n; o. [
// 每一趟都默认数组第一个元素为最大值
5 h* T( e( n2 z$ w max = 0;* j' [! z+ J. v* w; Y2 y1 J
7 D) l0 G# f( Y0 o U1 e // 内循环控制遍历数组的个数(每趟减1),并得到最大数的下标
- h$ w) I, Q1 ]9 |. k for (int j = 0; j < arr.length - i; j++) {
6 a5 f6 m$ ]; I if (arr[j] > arr[max]) {
" P5 o5 Q2 c3 W2 _- Z9 u9 l% t max = j;9 W5 {9 `6 [4 e& l- k5 K, x
}2 e( f4 B# W; [
}
1 k$ @8 O& e& z
9 H9 P0 M' {1 z3 y2 K& v# K: t // 将交换变量设置为最大值, 将最大值暂存一下
/ A# l. F& v7 j! m2 e temp = arr[max];4 J0 Z1 C" Y3 B f
// 将当前最大值设置为当前未排序序列的最后一个元素值
1 I# z# c9 |( o+ h8 ?6 q9 F3 N arr[max] = arr[arr.length - 1 - i];
- m( K! c T; v8 y1 J // 将刚才缓存的最大值,设置为当前未排序队列的最后一个元素,完成交换
o' y( F4 @* g6 U) g arr[arr.length - 1 - i] = temp;7 p) n: l5 ]* I% u: ]$ Y" t
}4 r$ D5 d0 d! B0 M9 |& p
; _; e- T& [: O' m7 N- G0 W6 [ System.out.println("排序后:" + Arrays.toString(arr));; t4 V4 V# m k0 T
}
$ ]$ t. n) @+ m/ f: N( {}, w9 K! W, w; M/ Y1 L5 T6 s
& Z- U+ I. C& P+ C关键步骤:
6 M2 ^8 y- B/ ^" g4 ~. H5 w, Y) G2 p! d1 n" \0 X, B
1. 首先定义两个变量:分别表示最大值标 和 交换变量;% ?. s! S8 I4 a# {3 ]0 u5 c) K/ s& g
2 o- u# X* w* J) _2 q$ _2. 通过外层for循环,控制排序的趟数;
$ Z5 {) y+ N5 E( _1 d3 @ W8 d' K' `( u) B. X- \5 `$ w
3. 通过内循环控制每趟需要遍历数组的次数,每趟会较上一趟减1,每次会得到最大值的下标。再下一趟外循环会将这个下标重新置为0;, l: _ ]8 W2 o' t) M
4 `% y3 J" `9 t( l2 s9 ]( q
4. 每趟找到最大值后,将交换变量设置为最大值,目的是将最大值进行一个暂存;3 H v- V; x7 \0 A
) D6 a/ j9 f" H* F" Q# C( k
5.然后将最大值设置为当前未排序序列的最后一个元素;
4 M6 F9 e; R, ^% I( H& f/ a( Y5 V1 E1 f* e2 z
6.最后将第4步缓存的最大值,设置为的当前未排序序列的最后一个元素
7 M: Q |. c% r b' y
* u) R( d: ]& v1 N& L7.至此完成数据交换,继续进行步骤2,直到数据数据有序。
+ s7 x$ R2 _( {2 Y8 l% I( O. _3 f/ B; v" `" ?
执行结果4 ^5 F2 s+ B- e
6 u1 a5 _( k: C+ I4 N8 Y* T————————————————( a4 b4 a* e" z) o/ _9 r
版权声明:本文为CSDN博主「大林子先森」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
4 F% I: ?1 ^7 L1 B9 {原文链接:https://blog.csdn.net/liulianglin/article/details/126741594
' @) |0 Q% D7 n7 n1 u9 L
; g! R, ~# T2 Z' F, U) `9 [( }
( P4 B& t; r" R. p$ K3 i& @ |
zan
|