黑马程序员技术交流社区
标题:
[选择排序]经典实现
[打印本页]
作者:
可以假装看不见
时间:
2016-5-26 21:50
标题:
[选择排序]经典实现
/*
* 选择排序:
* 算法思想:
* 从第一位开始比较,找到最小的然后从角标为1的元素往后开始比较找到第二小
* 示例:索引 0 1 2 3 4
* i 1 6 3 9 2
*
* 1 6 3 9 2 1<6 不动
* 1 6 3 9 2 1<3 不动
* 第0趟 1 6 3 9 2 1<9 不动
* 1 6 3 9 2 1<2 不动 得到1为最小值 arr[0] = 1
* 共比较4次
*
* 第1趟 1 3 6 9 2 6>3 交换
* 1 3 6 9 2 3<9 不动
* 1 2 6 9 3 3<2 交换 得到2为第二小 arr[1] = 2
* 共比较3次
* 第2趟 1 2 6 9 3 6<9 不动
* 1 2 3 9 6 6>3 交换 得到3位第三小 arr[2] = 3
* 共比较2次
*
* 第3趟 1 2 3 6 9 9>6 交换 的到6为第四小 arr[3] = 6
* 共比较1次 那么9就是最大的 arr[4] = 9
*
* 外圈循环4次 int.length() = 5 ; x
* 定义外圈变量 x = 0 ,那么内圈 y 从1-5 大于1 0 + 1 = 1
* 定义外圈变量 x = 1 ,那么内圈 y 从2-5 大于2 1 + 1 = 2
* 定义外圈变量 x = 2 ,那么内圈 y 从3-5 大于3 2 + 1 = 3
* 定义外圈变量 x = 3 ,那么内圈 y 从4-5 大于4 3 + 1 = 4
* 从arr[x]和arr[x+1]做对比 为了防止角标越界 外圈循环要少一次
*
*/
public class SelectSort {
/**
* @param args
*/
static int[] arr = {1,6,3,9,2};
public static void main(String[] args) {
sortArr1();
printArr();
}
public static void sortArr1() {
for (int i = 0; i < arr.length-1; i++) {
for (int j = i+1; j < arr.length; j++) {
if(arr[i]>arr[j]){
swap(arr,i,j);
}
}
}
}
private static void swap(int[] arr, int i, int j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
public static void printArr(){
System.out.print("[");
for (int i = 0; i < arr.length; i++) {
if(i!=arr.length-1){
System.out.print(arr[i]+" ,");
}else{
System.out.print(arr[i]+"]");
}
}
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2