选择排序-排序-算法

选择排序-排序-算法


目录




内容

1、前言

选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。选择排序是不稳定的排序方法。

2、算法

  1. 第一次,假定序列第1个元素为最小(最大)元素
  2. 以此与后面的元素比较,如果后面的元素比当前元素小(大),则交换2元素,直至序列结束
  3. 第二次,假定序列第2个元素为最小(最大)元素
  4. 以此与后面的元素比较,如果后面的元素比当前元素小(大),则交换2元素,直至序列结束
  5. 以此执行,直至序列结尾
  • 动图展示:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7LFILREm-1611756304205)(./images/selection.gif)]

3、Java代码实现

为统一和方便,我们这里的算法类为工具类,序列类型为Comparable[],代码如下:

	package com.gaogzhen.algorithm.sort;

/**
 * 选择排序
 * 1、从第一个元素开始,假定当前元素为当前位置最小的元素
 * 2、以此比较当前元素和之后的每一个元素,如果第一个元素大于后面的元素,则交互2个元素
 * 3、重复上述步骤,直到当前元素为最后一个元素
 */
public class Selection {
	// 排序
	public static void sort(Comparable[] a) {
		for (int i = 0; i < a.length - 1; i ++) {
//            int count = 0;
			for (int j = i + 1; j < a.length; j++) {
				if (compare(a[i], a[j])) {
//                    count++;
					exch(a, i, j);
				}
			}
//            if (count == 0) break;
		}
	}

	// 比较a是否大于b
	public static boolean compare(Comparable a, Comparable b) {
		return a.compareTo(b) > 0;
	}

	// 交换元素
	public static void exch(Comparable[] a, int i, int j) {
		Comparable t = a[i];
		a[i] = a[j];
		a[j] = t;
	}
}


// 测试类
public class SortTest {
	public static void main(String[] args) {

		Integer[] a = {1, 20, 5, 7 ,10};
//        Bubble.sort(a);
		Selection.sort(a);
		System.out.println(Arrays.toString(a));
	}
}

// 测试结果
[1, 5, 7, 10, 20]

4、算法时间复杂度分析

  • 最佳情况:T(n) = O(n^2)
  • 最差情况:
    • 比较次数

        (n-1) + (n-2) + ... + 1  = n^2/2-n/2
      
    • 交互次数

        (n-1) + (n-2) + ... + 1  = n^2/2-n/2
      
    • 总执行次数 = 比较次数+交换次数 = n^2 - n

    • 时间复杂度:T(n) = O(n^2)

后记

参考地址:

  1. 算法学习总结(2)——温故十大经典排序算法
  2. b站视频

数据结构和算法相关博文,持续更新,欢迎交流,本人QQ:806797785

   完整代码地址:<https://gitee.com/gaogzhen/algorithm>
已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 技术黑板 设计师:CSDN官方博客 返回首页