前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >选择排序法

选择排序法

作者头像
李志伟
发布2019-12-17 17:37:51
3870
发布2019-12-17 17:37:51
举报
文章被收录于专栏:为学为学

选择排序法

分析

  • 假设已经给定了一个无序数组,现在需要将其按照一定顺序排好。现在我们使用选择排序法,每次从数组中选出一个最大的元素并将其与数组最后一个元素交换位置,使数组最后一个元素变为最大的。
  • 随着排序的进行,每次需要检查的元素数在逐渐减少,最后一次需要检查的元素都只有一个。既然如此,运行时间怎么还是O(*n*2)呢?这个问题问得好,这与大O表示法中的常数相关。第4章将详细解释,这里只简单地说一说。 你说得没错,并非每次都需要检查n个元素。第一次需要检查n个元素,但随后检查的元素数依次为n - 1, n – 2, …, 2和1。平均每次检查的元素数为1/2 × n,因此运行时间为O(n × 1/2 × n)。但大O表示法省略诸如1/2这样的常数(有关这方面的完整讨论,请参阅第4章),因此简单地写作O(n × n)或O(*n*2)。 ​ — 《算法图解》

代码实现

C语言实现

因为C中对数组的删除比较麻烦,所以我没有按照《算法图解》中的思路每次选择最小的元素,而是选择了最大的。

代码语言:javascript
复制
void SelectionSort(int arr[], int length){  
    //C在函数中传数组长度较为麻烦,所以在数组定义出就将长度定义好传了过来

    int i, temp,biggest_index = 0;
    while (length){
         biggest_index = 0;
        for (i = 0; i < length; i++){
            if (arr[biggest_index] < arr[i]){
                biggest_index = i;
            }
        }
        printf("%d\n", arr[biggest_index]);
        temp = arr[biggest_index];
        arr[biggest_index] = arr[length - 1];
        arr[length -1] = temp;
        length --;
    }

}

JAVA语言实现

JAVA实现思路同C。

代码语言:javascript
复制
public int[] SelectionSort(int[] arr) {
        int length = arr.length;
        int biggestIndex;
        int i, temp;

        while(length > 0) {
            biggestIndex = 0;
            for(i = 0; i < length; i ++) {
                if(arr[biggestIndex] < arr[i]) {
                    biggestIndex = i;
                }
            }
            temp = arr[biggestIndex];
            arr[biggestIndex] = arr[length - 1];
            arr[length - 1] = temp;
            System.out.println(arr[length - 1]);
            length --;
        }
        return arr;
    }
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 选择排序法
    • 分析
      • 代码实现
        • C语言实现
        • JAVA语言实现
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档