算法——选择排序

xiaoxiao2021-02-28  100

踏踏实实学算法,从今天开始,从现在开始。

选择排序的思想:从开始遍历选择最小的元素与第一个元素进行交换,则第一个数字为最小,再从剩下元素中选择最小的元素与第二个进行交换,直到最后一个元素,数组实现排序。(从结尾遍历选择最大的元素)

优化:把在无序序列中选择最大元素的过程写成一个函数,更加容易理解。

public class SelectionSort { /** * 写在一个函数里,找最大 * @param array */ public static void sortOne(int[] array){ int length = array.length; for (int i = length-1; i > 0; i--) { int index = i; for ( int j = index - 1; j >= 0; j--) { if (array[j] > array[i]) { index = j; // 标记未排序元素中最大数的位置 } } // 未排序中最大数与未排序中最后一个数交换 if (i != index) { int temp = array[i]; array[i] = array[index]; array[index] = temp; } } } /** * 写在一个函数里,找最小 * @param array */ public static void sortOneOne(int[] array) { int length = array.length; for (int i = 0; i < length - 1; i++) { int index = i; for (int j = index; j <= length-1; j++) { if (array[j] < array[i]) { index = j; } if (i != index) { int temp = array[i]; array[i] = array[index]; array[index] = temp; } } } } /** * 写在两个函数里 * @param array destination array */ public static void sortTwo(int[] array) { int length = array.length; for(int i = length-1; i > 0; i--) { int index = indexOfLargest(array, 0, i); int temp = array[index]; array[index] = array[i]; array[i] = temp; } } /** * 找到数组指定范围的最大值的index */ private static int indexOfLargest(int[] array, int start, int end) { int max = array[start]; int index = 0; for (int i = start+1; i <= end; i++) { if (array[i] > max) { max = array[i]; index = i; } } return index; } public static void main(String[] args) { int[] array = {0,9,8,7,6,5,4,3,2,1}; // SelectionSort.sortOne(array); // SelectionSort.sortOneOne(array); SelectionSort.sortTwo(array); for(int i = 0; i < array.length; i++) { System.out.print(array[i] + " "); } } }

如果本博客对你有一定帮助,客官请留下你的脚步吧…

转载请注明原文地址: https://www.6miu.com/read-56907.html

最新回复(0)