1.基本思想
将指定排序位置与其他数组元素分别对比,如果满足条件就进行交换。个人理解其实就是每趟循环从数组里选一个最大的值(最小的值)放到数组最后(最前)。
2.算法实现
这里以每趟循环从数组中选择一个最大的值来实现。可知,只需进行 n-1次循环,便能完成排序。
Java实现代码如下:
1 public class SelectSort { 2 public static void main(String[] args) { 3 int arr[] = {64,4,24,1,3,15}; 4 SelectSort sorter = new SelectSort(); 5 sorter.sorted(arr); 6 } 7 8 9 public void sorted(int arr[]) { 10 for(int i = 0;i < arr.length - 1;i++) {//循环n-1次,每次循环确定一个值的位置 11 int index = 0; 12 for(int j = 0;j < arr.length - i;j++) {//比较元素的个数每次会减少一个 13 if(arr[index] < arr[j]) {//每次循环选择出一个最大的值,并用index标记位置 14 index = j; 15 } 16 } 17 //实现指定位置与index标记位置的元素交换 18 int temp = arr[arr.length-i-1]; 19 arr[arr.length-i-1] = arr[index]; 20 arr[index] = temp; 21 } 22 showArray(arr); 23 } 24 25 26 public void showArray(int arr[]) { 27 for(int i = 0;i < arr.length;i++) { 28 if(i < arr.length - 1) { 29 System.out.print(arr[i]+"、"); 30 }else { 31 System.out.print(arr[i]); 32 } 33 } 34 } 35 }
Python代码实现如下:
# -*- coding: utf-8 -*- def SelectSort(list1): for i in range(len(list1)-1)://循环n-1次 index = 0 for j in range(len(list1)-i)://比较元素个数随循环次数递减 if lsit1[index] < list1[j]: index = j temp = list1[len(list1)-1-i] list1[len(list1)-1-i] = list1[index] list1[index] = temp print("第{}次排序结果为: ".format(str(i+1)) + str(list1)) return list1 if __name__ == '__main__': lista = [63,4,24,3,1,15] list2 = SelectSort(lista) print("最终结果为: "+str(list2))