题解 | #排序#
排序
http://www.nowcoder.com/practice/2baf799ea0594abd974d37139de27896
按照升序排序数组 若该数组有n个数,则只需要排序n-1轮即可得出有升序数组的列 每一轮查找都遍历数组找出最小的数,放在每一轮的第一位上, 比如第一轮查找最小的值放在第一位;第二轮查找剩下的n-1个数中的最小的值放在第二位; 依次类推
package com.leo.niukePortal;
/**
* 1、AB30-排序 升序排列数组
* 2、
* 3、
* 4、
*/
public class SortTest {
public static void main(String[] args) {
int[] arr = {5, 8, 11, 24, 3, 9, 15, 19, 17};
int[] sort2 = selectSort2(arr);
System.out.print("[");
for (int i = 0; i < sort2.length; i++) {
if (i == sort2.length - 1) {
System.out.println(sort2[i] + "]");
break;
}
System.out.print(sort2[i] + ",");
}
}
// 选择排序-演进
public static int[] selectSort2(int[] arr) {
for (int i = 0; i < arr.length - 1; i++) {
for (int j = i + 1; j < arr.length; j++) {
if (arr[j] < arr[i]) {
// 交换最小值到第一位
int temp = arr[j];
arr[j] = arr[i];
arr[i] = temp;
}
}
}
return arr;
}
// 冒泡排序
public static int[] bubbleSort2(int[] arr) {
// 假设n个数,循环n-1轮即可升序排序完成
// 选择最大的放在最后一位,每循环完一轮就要减去1轮的循环次数,循环完2轮就减去2轮的循环次数
for (int i = 1; i < arr.length; i++) {
for (int j = 0; j < arr.length - i; j++) {
if (arr[j+1] < arr[j]) {
// 先把最小的值存放到其他位置
int temp = arr[j+1];
// 然后把之前第一位更大的值放到i位置上
arr[j+1] = arr[j];
// 再把i位置的值临时存放到temp中取出放到这一轮的第一位
arr[j] = temp;
}
}
}
return arr;
}
}