【java基础】选择排序算法原理+实现

思想:

    一次遍历,只需一次交换;
    选择排序,每次选最小,放在已排序队列末尾,依次进行,直到全部排序完成.

执行:

                  

(1) 从待排序序列中,找到最小的元素;

(2) 如果最小元素不是待排序序列的第一个元素,将其和第一个元素互换;

(3) 从余下的 N - 1 个元素中,找出关键字最小的元素,重复(1)(2)步,直到排序结束。

[1, 54, 6, 3, 78, 34, 12, 45]
---第1轮 
---------第1次 
1 54 6 3 78 34 12 45  
---------第2次 
1 54 6 3 78 34 12 45  
---------第3次 
1 54 6 3 78 34 12 45  
---------第4次 
1 54 6 3 78 34 12 45  
---------第5次 
1 54 6 3 78 34 12 45  
---------第6次 
1 54 6 3 78 34 12 45  
---------第7次 
1 54 6 3 78 34 12 45  
---第2轮 
---------第2次 
1 3 6 54 78 34 12 45  
---------第3次 
1 3 6 54 78 34 12 45  
---------第4次 
1 3 6 54 78 34 12 45  
---------第5次 
1 3 6 54 78 34 12 45  
---------第6次 
1 3 6 54 78 34 12 45  
---------第7次 
1 3 6 54 78 34 12 45  
---第3轮 
---------第3次 
1 3 6 54 78 34 12 45  
---------第4次 
1 3 6 54 78 34 12 45  
---------第5次 
1 3 6 54 78 34 12 45  
---------第6次 
1 3 6 54 78 34 12 45  
---------第7次 
1 3 6 54 78 34 12 45  
---第4轮 
---------第4次 
1 3 6 12 78 34 54 45  
---------第5次 
1 3 6 12 78 34 54 45  
---------第6次 
1 3 6 12 78 34 54 45  
---------第7次 
1 3 6 12 78 34 54 45  
---第5轮 
---------第5次 
1 3 6 12 34 78 54 45  
---------第6次 
1 3 6 12 34 78 54 45  
---------第7次 
1 3 6 12 34 78 54 45  
---第6轮 
---------第6次 
1 3 6 12 34 45 54 78  
---------第7次 
1 3 6 12 34 45 54 78  
---第7轮 
---------第7次 
1 3 6 12 34 45 54 78  
1 3 6 12 34 45 54 78 

分析:

    如下代码可看出,选择排序的时间复杂度是O(n*n);由于此算法利用了一个临时空间,当做中转位置来放置每次的最小值,所以,它的空间复杂度是O(1).

实现:

import java.util.Arrays;

public class selectSort {  

    	public static void main(String[] args){
	       int a[]={1,54,6,3,78,34,12,45};  
	        //输出定义的数组
	       System.out.println(Arrays.toString(a));
	       
	       //可以理解成这是一个每次比较的标志位
	       int position=0;  
	  
	       for(int i=1;i<a.length;i++){  
	           System.out.println("---第"+i+"轮 ");
	           
	           position=i;  
	           //定义一个临时存放数值
	           int temp=a[i];  
	  
	           //内层循环---循环找出当前最小的,和标志位的数字比较,若小则交换位置
	           for(int j=i;j<a.length;j++){  
	  
		           if(a[j]<temp){  
		  
		              temp=a[j];  
                                                                                                          
		              position=j;  
		           }  
		           
		           System.out.println("---------第"+j+"次 ");
		         //依次循环输出当前数组中的数字
					 for (int l = 0; l < a.length; l++) {  
			                System.out.print(a[l] + " ");  
			            }  
			            System.out.println(" "); 
	          } 
	           //若本轮中数字不用交换位置,则保持当前
	           a[position]=a[i];  
	           a[i]=temp; 
	       }  
	    }  
}  



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值