package com.xxx.xxx;
/**
* 1.直接选择排序
* 2.反转排序
* @author Administrator
*
*/
public class demo11 {
//直接选择排序
/**
* 直接选择排序比冒泡排序快一些
* 基本思想:将指定排序位置与其他数组元素分别对比,满足就交换
* (注意:这里区别冒泡排序,不是交换相邻元素,而是把满足条件的元素与指定的排序位置交换)
* 与冒泡排序相比,直接选择排序的交换次数要少很多
*/
public static void main(String[] args) {
//直接选择排序
int index;
int[] array = {63,4,24,1,3,15}; //创建数组是乱序的
for(int i=1;i<=array.length;i++){ //开始为 1 ,判断是 小于等于
index = 0;
for(int j = 1;j<= array.length-i;j++){ //开始为 1, 判断是 小于等于, 长度-1
if(array[j] > array[index]){ // if判断
index = j;
}
}
//交换在位置 array_sort.length-1 和 index_sort(最大值)上的两个数
int temp = array[array.length-i]; //把第一个元素保存在临时变量中
array[array.length-i] = array[index]; //把第二个保存在第一个
array[index] = temp; //把临时变量(也就是第一个)保存在第二个元素中
}
//遍历输出
for(int k : array){
System.out.print(">"+k);
}
System.out.println("\n--------------------------");
//2.反转排序
/**
* 基本思想:把数组最后一个元素与第一个元素替换,倒数第二个元素把第二个元素替换,以此类推,直到把所有数组元素反转替换
* 反转排序是对数组两边的元素进行替换,所以只需要循环数组长度的半数次
* 如数组长度为7,那么for循环只需循环3次
*/
int[] a = {10,20,30,40,50,60};
//数组反转后遍历输出
for(int x : a){
System.out.print(x+"\t");
}
System.out.println();
int temp;
int len = a.length; //获取数组长度
for(int i=0;i<len / 2 ;i++){ //根据算法,长度 除2
temp = a[i]; //交换
a[i] = a[len - 1 - i];
a[len - 1 - i] = temp;
}
//数组反转后遍历输出
for(int x : a){
System.out.print(x+"\t");
}
}
}