选择排序(思路+算法)

选择排序

选择排序是一个十分基础,简单的排序。
思路:1.找到数组中最小的元素,拎出来,将它和数组的第一个元素交换位置; 2.在剩下的元素中继续寻找最小的元素,拎出来,和数组的第二个元素交换位置; 3.如此循环,直到整个数组排序完成。
4.若是由大到小也是同样方法,只需要修改比较大小的符号;


   public static void sort(int arr[])
   {
       for(int i=0;i<arr.length;i++){
           int min = i;//最小元素的下标
           for(int j=i+1;j<arr.length;j++){
               if(arr[j] < arr[min]){
                   min = j;//找最小值
               }
           }
           //交换位置
           int temp = arr[i];
           arr[i] = arr[min];
           arr[min] = temp;
       }
   }

双重循环,时间复杂度为O(n2)
算 法 特 点 简 述 算法特点简述
选择排序的方法,即使没有学过算法,日常生活中一般人遇见排序问题时,大多数用的就是选择排序。 进行由大到小的排序时,通常就是从中先挑出最大的,再从剩下来的中间挑出最大的,就这样挑完,就排好序了,很直观好懂。

个人在先前的老师教学中陷入误区,代码较上面比较如下(交换位置部分,存在问题):

int tmp = arr[min],k=arr.length;
while(k>i&&k<min){
arr[k]=arr[k-1];
}//将第i位后面的数据向后移一位
arr[i] = tmp;

该方法明显代价更高,比上面要移的数据量更多。当时前面正好讲了数组的插入部分,就套用过来,但是浪费太多次数据移位,算法效率,明显不如上面的部分;
优点:排序的稳定性要远好于上面的部分。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值