JAVA排序算法--选择排序

本文详细介绍了一种简单直观的排序算法——选择排序,并提供了完整的Java实现代码。选择排序通过不断寻找数组中最小元素并将其置于已排序序列的起始位置来完成排序过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

选择排序的思想是 先拿出数组里的第一个数a[0] 用后面的每一个数一次和它比较 如果发现有比a[0]大(我们以升序为例) 就记录这个数的下标lowerIndex 请注意 并没有交换两个数的位置 再继续往后遍历 用后面的数和a[lowerIndex]比较大小 同理 若比a[lowerIndex]小 就把这个数的下标赋值给lowerIndex 知道内层循环结束 即把整个数组中最小的数找到了 并放在了第一个位置 注意 这时候 其他数的位置并没有发生变化 然后跳出到外层循环 i++ 继续执行下一次遍历
以下是具体实现代码。。



/**
* JAVA排序算法--选择排序
*
* @author 千醉 JAVA新手菜鸟群 32413139
*
*/
public class Test {

public static void SelectSort(int a[]) {
int i, j, k; // 循环计数变量
int lowerIndex; // 最小值索引变量
int temp; // 暂存变量

for (i = 0; i < a.length ; i++) {
lowerIndex = i; // 储存最小数值的索引值
for (j = i+1; j < a.length; j++) {
if (a[j] < a[lowerIndex]) // 找到最小值 注意此处不是判断a[j]<a[i]
lowerIndex = j ;
}
if(i!=lowerIndex)//交换两数 即 把当前未排序的剩余数中把选择出来的最小的放到i的位置上
{
temp = a[i] ;
a[i] = a[lowerIndex] ;
a[lowerIndex] = temp ;
}
System.out.print("排序中: ");
for (k = 0; k < a.length; k++)
System.out.printf("%3s", a[k]);
System.out.println("");
}
}

public static void main(String args[]) {
int[] a = { 10, 32, 1, 9, 5, 7, 12, 0, 4, 3 }; // 预设数据数组
int i; // 循环计数变量


System.out.print("排序前: ");
for (i = 0; i < a.length ; i++)
System.out.printf("%3s", a[i]);
System.out.println("");

SelectSort(a); // 选择排序
// 排序后结果
System.out.print("排序后: ");
for (i = 0; i < a.length ; i++)
System.out.printf("%3s", a[i]);
System.out.println("");
}
}



运行结果:

排序前: 10 32 1 9 5 7 12 0 4 3
排序中: 0 32 1 9 5 7 12 10 4 3
排序中: 0 1 32 9 5 7 12 10 4 3
排序中: 0 1 3 9 5 7 12 10 4 32
排序中: 0 1 3 4 5 7 12 10 9 32
排序中: 0 1 3 4 5 7 12 10 9 32
排序中: 0 1 3 4 5 7 12 10 9 32
排序中: 0 1 3 4 5 7 9 10 12 32
排序中: 0 1 3 4 5 7 9 10 12 32
排序中: 0 1 3 4 5 7 9 10 12 32
排序中: 0 1 3 4 5 7 9 10 12 32
排序后: 0 1 3 4 5 7 9 10 12 32
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值