学习目标:
选择排序算法:
* 每一轮从待排序的数据元素中选出最小(或最大)的一个元素
* 顺序放到已排好序的数列的最后,直到所有的元素排完
* 选择排序是不稳定的排序
学习内容:
package com.qf.lzp;
public class Algorithm02 {
/** 选择排序算法:
* 每一轮从待排序的数据元素中选出最小(或最大)的一个元素
* 顺序放到已排好序的数列的最后,直到所有的元素排完
* 选择排序是不稳定的排序
*
* 如:3 2 5 6 4 8 7 1 3 以最小为例
* * 第一轮后 1 3 2 5 6 4 8 7 3 第一轮比较8次
* * 第二轮后 1 2 3 5 6 4 8 7 3 第二轮比较7次
* * 。。。。。。
* * 第八轮后 1 2 3 3 4 5 6 7 8 第八轮比较1次
*/
public static void main(String[] args) {
int[] nums1={3,2,5,6,4,8,7,1,3};
int[] nums2={9,8,7,6,5,4,3,2,1};
SelectSort(nums1);
SelectSort(nums2);
}
public static void SelectSort(int[] A){ //选择排序算法
//外循环控制轮次
for(int i=0;i<A.length-1;i++){
int minIndex=i;
//内循环进行比较
for(int j=i+1;j<A.length;j++){
if(A[minIndex]>A[j]){
minIndex=j;
}
}
if(i!=minIndex){ //相对于冒泡排序,一轮只进行一次换位
A[i]=A[minIndex]+A[i];
A[minIndex]=A[i]-A[minIndex];
A[i]=A[i]-A[minIndex];
}
System.out.print(“第”+(i+1)+“轮后,数组当前的顺序为:”);
for(int k=0;k<A.length;k++){
System.out.print(A[k]+" “);
}
System.out.println();
}
System.out.println(”------------");
}
}
运行结果: