选择排序(Selectsort)之Java实现

本文详细介绍了选择排序算法的工作原理、实现方式及其与冒泡排序的对比,通过Java代码展示了选择排序的具体实现过程,包括如何通过数组工具类辅助完成排序任务。

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


目录(?)[+]

选择排序算法介绍

选择排序与冒泡排序非常的相似,都是一层层筑顶的过程,不同点在于冒泡排序会频繁的互换位置,而选择排序只是记录最大元素的位置,并与顶互换,只需交换一次。所以选择排序与冒泡排序相比时间常数会更小,更有效率,尽管他们的最坏运行时间都是O(n2)

选择排序算法Java实现

如《插入排序(Insertsort)之Java实现》一样,先实现一个数组工具类。代码如下:

  1. publicclassArrayUtils{
  2. publicstaticvoidprintArray(int[]array){
  3. System.out.print("{");
  4. for(inti=0;i<array.length;i++){
  5. System.out.print(array[i]);
  6. if(i<array.length-1){
  7. System.out.print(",");
  8. }
  9. }
  10. System.out.println("}");
  11. }
  12. publicstaticvoidexchangeElements(int[]array,intindex1,intindex2){
  13. inttemp=array[index1];
  14. array[index1]=array[index2];
  15. array[index2]=temp;
  16. }
  17. }

逐步选取n-1到1(Java里面数组以0开始标记),分别作为第n,n-1,...,2层顶,第2层顶筑好了之后,只剩下一个比它小的元素,排序结束。每个顶的筑成算法如下:用maxIndex变量记录最大元素的位置,初始化为顶所在的位置(默认顶最大),从顶的前面一位到位置0,依次和当前的最大元素比较,如果比当前的最大元素大,maxIndex更新为新的位置,循环结束已经知道最大元素的位置maxIndex,如果最大元素不是顶,那么交换最大元素和顶。选择排序的Java实现以及测试代码如下:

  1. publicclassSelectSort{
  2. publicstaticvoidmain(String[]args){
  3. int[]array={9,8,7,6,5,4,3,2,1,0,-1,-2,-3,8};
  4. System.out.println("Beforesort:");
  5. ArrayUtils.printArray(array);
  6. selectSort(array);
  7. System.out.println("Aftersort:");
  8. ArrayUtils.printArray(array);
  9. }
  10. publicstaticvoidselectSort(int[]array){
  11. if(array==null||array.length<2){
  12. return;
  13. }
  14. intsize=array.length;
  15. for(inti=size-1;i>0;i--){
  16. intmaxIndex=i;
  17. for(intj=i-1;j>=0;j--){
  18. if(array[j]>array[maxIndex]){
  19. maxIndex=j;
  20. }
  21. }
  22. if(maxIndex!=i){
  23. ArrayUtils.exchangeElements(array,i,maxIndex);
  24. }
  25. }
  26. }
  27. }

选择排序算法介绍

选择排序与冒泡排序非常的相似,都是一层层筑顶的过程,不同点在于冒泡排序会频繁的互换位置,而选择排序只是记录最大元素的位置,并与顶互换,只需交换一次。所以选择排序与冒泡排序相比时间常数会更小,更有效率,尽管他们的最坏运行时间都是O(n2)

选择排序算法Java实现

如《插入排序(Insertsort)之Java实现》一样,先实现一个数组工具类。代码如下:

  1. publicclassArrayUtils{
  2. publicstaticvoidprintArray(int[]array){
  3. System.out.print("{");
  4. for(inti=0;i<array.length;i++){
  5. System.out.print(array[i]);
  6. if(i<array.length-1){
  7. System.out.print(",");
  8. }
  9. }
  10. System.out.println("}");
  11. }
  12. publicstaticvoidexchangeElements(int[]array,intindex1,intindex2){
  13. inttemp=array[index1];
  14. array[index1]=array[index2];
  15. array[index2]=temp;
  16. }
  17. }

逐步选取n-1到1(Java里面数组以0开始标记),分别作为第n,n-1,...,2层顶,第2层顶筑好了之后,只剩下一个比它小的元素,排序结束。每个顶的筑成算法如下:用maxIndex变量记录最大元素的位置,初始化为顶所在的位置(默认顶最大),从顶的前面一位到位置0,依次和当前的最大元素比较,如果比当前的最大元素大,maxIndex更新为新的位置,循环结束已经知道最大元素的位置maxIndex,如果最大元素不是顶,那么交换最大元素和顶。选择排序的Java实现以及测试代码如下:

  1. publicclassSelectSort{
  2. publicstaticvoidmain(String[]args){
  3. int[]array={9,8,7,6,5,4,3,2,1,0,-1,-2,-3,8};
  4. System.out.println("Beforesort:");
  5. ArrayUtils.printArray(array);
  6. selectSort(array);
  7. System.out.println("Aftersort:");
  8. ArrayUtils.printArray(array);
  9. }
  10. publicstaticvoidselectSort(int[]array){
  11. if(array==null||array.length<2){
  12. return;
  13. }
  14. intsize=array.length;
  15. for(inti=size-1;i>0;i--){
  16. intmaxIndex=i;
  17. for(intj=i-1;j>=0;j--){
  18. if(array[j]>array[maxIndex]){
  19. maxIndex=j;
  20. }
  21. }
  22. if(maxIndex!=i){
  23. ArrayUtils.exchangeElements(array,i,maxIndex);
  24. }
  25. }
  26. }
  27. }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值