面试笔试准备(3)选择算法

本篇内容为牛客网,左程云算法课程课堂笔记。

(1)课程讲解:选择排序:一开始在整个数组范围上选出最小值:放在位置零上,然后再1到n-1的位置上,选出一个最小值,放在位置1上。按照这样的方法,直到数组结束。

时间复杂度为o(n^2);选择排序每次实现将一个值放到他最终的位置上,从前往后。而冒泡排序是从后往前,把图个元素放到他最终可以放的位置上。

public int[] selectionSort(int[] A, int n) {
       for (int i = 0; i < A.length; i++) {
    	   int min=i;;
		for (int j = i+1; j < A.length; j++) {
			if (A[min]>A[j]) {
				min=j;//最小值的那个位置
			}
		}
		if (min!=i) {
			int tmp=A[min];
			A[min]=A[i];
			A[i]=tmp;
		}
		
	}
       return A;
    }

无论记录的初始排列如何,所需的关键字间的比较次数相同,均为n(n-1)/2,总的时间复杂度为O(n2);
空间复杂度 O(1);

简单选择排序算法不是一个稳定的排序算法:因为,简短选择排序,是从后续序列中,找出最小的那个元素,和他进行交换,那么如果后续序列中有一个和i位置相同的值的元素,又有最小值在这个相同的值的后面,那么i这个位置上的值,就会被交换在与他相同的值的后面去。所以,选择排序不是一种稳定的排序算法。


你可能感兴趣的:(面试笔试准备(3)选择算法)