- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 564448 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 174557
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 3
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
|---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
排序算法--选择排序(Java实现); T) g- n+ ~1 P+ |: m3 h: x
# s/ D3 S8 C( d( L" b
选择排序概念: W% g( k. o: V2 i4 F, Q' \
选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。选择排序是不稳定的排序方法。 --form baike' g& A G8 ?" r$ `4 K6 _' X
( g" D3 s2 y: K. Z" I2 ]* A: T思想
0 r; F9 l: M: O) l! ^% T, J9 l* 每次从待排序的数据元素中选出最小或最大的一个元素,存放在序列的起始或末尾位置
7 K* E- e2 \* Z' C1 s1 {4 p1 ^, P* 长度为n的数组一共需要进行n-1趟排序,每趟排序会进行一次值的交换;. Y$ a: f$ \# \; ]& @- t0 E5 X
* 当进行下一次排序时,范围缩小1
- y* k b/ Q+ } f3 ^- y) `
3 d) U& O7 L' ^( [ D代码实现) K! D: ?: G/ } x7 b
package com.lll.datastructure.sort;) I1 A a$ X& j$ j
( j3 R9 p! n; c7 w. L! a3 ~
import java.util.Arrays;
( c5 Z! D6 P( B# m5 [) B) B
0 f) A- F3 b2 q/**
$ X7 e* X- P D7 | \$ k * $ ^0 u7 v8 m; e. Y( z8 k
* @ClassName: SelectionSort0 t4 O* Z4 r8 D% w" ~" F
* @Description: 选择排序7 g) u; s/ i7 ?# }- a
* @Author: liulianglin) F0 H P8 ~) O
* @DateTime 2022年9月7日 上午9:12:13
9 b( b: ?0 V! u- q, `- u7 Q* , `" |4 b- l2 |+ l8 f: P1 c
* 选择排序思想:0 _7 E/ L3 S& E1 P M& z
* 每次从待排序的数据元素中选出最小或最大的一个元素,存放在序列的起始或末尾位置
! A! s2 h6 b! E) l8 r" @& _: g% G* 长度为n的数组一共需要进行n-1趟排序,每趟排序会进行一次值的交换;; T" `) R' {! G
当进行下一次排序时,范围缩小1: {5 S; n$ P$ v: S/ x$ |! k
*/
) w' D, p# Y" V$ o& S# Rpublic class SelectionSort {& {/ J8 ?8 o: _$ p
public static void main(String[] args) {# |6 _8 J, U( L
// 待排序数据4 h |: x G7 ]! Q t: |4 {, }
int[] arr = {1,3,2,4,7,54,11,34,9};
# J3 N" d% v- ?+ l
* `+ P. j* G0 X0 N" X4 h6 [ // 记录当前趟数查找到的最大值的数组下标 : V, n2 v" @, Y7 n+ c' s: M
int max;
8 _( j9 F% b6 a6 G+ E
5 v# e/ M; n! ^- O! g2 s4 b, z // 交换变量
+ n( Y$ Q# ~+ G" B7 q) y' t5 O( s1 p int temp;8 |1 r5 W2 O* z; g8 N# f% O9 }
, A: F7 i; @& y% L+ g& e9 [
System.out.println("排序前:" + Arrays.toString(arr));: q# r7 b: G% D# F8 E
: L! U* A$ |9 N2 K2 S // 外层控制循环需要排序的趟数1 A; f; t8 T& F( k+ \/ ]
for(int i = 0; i < arr.length - 1; i++) {4 B5 P6 _* w t3 R. I8 X
// 每一趟都默认数组第一个元素为最大值
; W. b: [ A8 ]9 ] max = 0;
4 X0 c# ^0 K/ Z7 ~: R1 p, K; q 9 c8 I% \# Y/ W$ }
// 内循环控制遍历数组的个数(每趟减1),并得到最大数的下标- Q- C! X# P# s- \' M
for (int j = 0; j < arr.length - i; j++) {
2 A- O! I* ~( }8 ~+ Q if (arr[j] > arr[max]) {
) K# Q. M& }( ?$ i& q9 M. h max = j;" j. `& G( I4 f7 n% x4 a5 L, {
}5 H8 p8 a- d% }4 Y2 N- \. `+ T
}$ i9 j P/ M& U, b
/ C" \/ ^2 w0 T& U- g: h! D$ R
// 将交换变量设置为最大值, 将最大值暂存一下
6 b' e7 t# n7 B( R" \ temp = arr[max];. f0 _. H# i! c6 m3 I3 d T7 u# u
// 将当前最大值设置为当前未排序序列的最后一个元素值( u$ w5 a1 R5 t" I. M
arr[max] = arr[arr.length - 1 - i];! x# @) Y: z$ A; K
// 将刚才缓存的最大值,设置为当前未排序队列的最后一个元素,完成交换- l8 m* A; w, F
arr[arr.length - 1 - i] = temp;
5 U% h: f0 i9 @" d2 s }
* q/ G: _4 P: C1 y+ Q! F4 ?/ F
5 C* F6 A) }1 T( }9 i$ |6 x System.out.println("排序后:" + Arrays.toString(arr));8 k0 q! `* B. z7 ^1 J) a' ^, H
}
4 B/ K4 I2 [3 m6 ? `5 s( V, Q5 O' H}
" v5 l' q0 o( |2 B( f
- a/ i* j. o# n9 q z$ m* x关键步骤:$ R) T' u% b" ~% }+ n2 u" p4 V
, T$ M& n% r o: ~' m) p# ?
1. 首先定义两个变量:分别表示最大值标 和 交换变量;
# `$ Y5 i4 m A3 E8 M+ s2 y
: T, M @! V# w' b2. 通过外层for循环,控制排序的趟数;1 Y; |8 M0 t9 }
3 Z- |& O( _5 L# I/ k3. 通过内循环控制每趟需要遍历数组的次数,每趟会较上一趟减1,每次会得到最大值的下标。再下一趟外循环会将这个下标重新置为0;; x( r% F0 N! j k' R3 _
+ R- q! l+ w: G
4. 每趟找到最大值后,将交换变量设置为最大值,目的是将最大值进行一个暂存;$ L8 I: |/ r! F, \7 C# D$ J
( }7 \* p, v4 w# }" [
5.然后将最大值设置为当前未排序序列的最后一个元素;
; _1 O, k& n" z& y% u6 s# M/ q, A- N# M! w% a- h6 |* V* N4 u
6.最后将第4步缓存的最大值,设置为的当前未排序序列的最后一个元素1 w2 E3 C! W! y* ^: ^
- C& S" \% y2 T7 P7.至此完成数据交换,继续进行步骤2,直到数据数据有序。+ V( k4 \9 |4 a" Q" P) w0 E! G/ {
# [+ e2 p8 V" T0 `
执行结果- t1 z1 F$ b, a2 I. y. B/ c
7 r) `/ \9 y/ d" o' D4 [0 a) v
————————————————. D ? j$ m' U
版权声明:本文为CSDN博主「大林子先森」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
" q8 _+ m( l. \7 D5 p原文链接:https://blog.csdn.net/liulianglin/article/details/126741594
& X' m6 ]' q# B4 T+ m: I* M' \; e3 {* Q' R) P0 t' `. `; D5 n
. W! @" J6 F, F. v4 o# T, s) _
|
zan
|