选择排序(思路+算法)

排序 专栏收录该内容
2 篇文章 0 订阅

选择排序

选择排序是一个十分基础,简单的排序。
思路: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;

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

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值