代码:
package test.java03;
import java.util.Random;
public class MaoPaoSort {
/**
* 返回随机数组
*/
public static int[] randowArray(int num) {
Random random = new Random();
int[] nums = new int[num];
for (int i = 0; i < num; i++) {
nums[i] = random.nextInt(50);
}
return nums;
}
public static void main(String[] args) {
/*
* 选择排序是一种简单之光的排序算法,基本原理是:
* 从数据元素中选出一个最大或者最小的一个元素,顺序放在一个已排好的数列最后,直到全部待排序的元素排完.
* */
int[] nums = randowArray(5);
System.out.print("原始数据:\t");
for (int i : nums) {
System.out.print(i + "\t");
}
System.out.println();
int index;
for (int i = 1; i < nums.length; i++) {
index = 0;
for (int j = 1; j <= nums.length - i; j++) {
if (nums[j] > nums[index]) {
index = j;
}
}
int tmp = nums[nums.length - i];
nums[nums.length - i] = nums[index];
nums[index] = tmp;
System.out.print("第" + (i) + "次排序:");
for (int j : nums) {
System.out.print(j + "\t");
}
System.out.println();
}
System.out.print("最终结果:\t");
for (int i : nums) {
System.out.print( i + "\t");
}
System.out.println("\n-------------------------------------------");
/**基本原理1:
* 从数组第一个值开始,顺序比较相邻的值大小,如不符合顺序呼唤位置,否则不变
*/
int[] nums1 = randowArray(5);
System.out.print("原始数据:\t");
for (int i : nums1) {
System.out.print(i + "\t");
}
System.out.println();
for (int i = 0; i < nums1.length; i++) {
for (int j = 0; j < nums1.length-1-i; j++) {
if (nums1[j] > nums1[j+1]) {
int tmp = nums1[j+1];
nums1[j+1] = nums1[j];
nums1[j] = tmp;
}
}
System.out.print("第" + (i+1) + "次排序:");
for (int j : nums1) {
System.out.print(j + "\t");
}
System.out.println();
}
System.out.print("最终结果:\t");
for (int i : nums1) {
System.out.print(i + "\t");
}
System.out.println("\n-------------------------------------------");
/**
* 据说不是正宗的冒泡排序
*/
int[] nums2 = randowArray(5);
System.out.print("原始数据:\t");
for (int i : nums2) {
System.out.print(i + "\t");
}
System.out.println();
for (int i = 0; i < nums2.length; i++) {
for (int j = i+1; j < nums2.length; j++) {
if (nums2[i] > nums2[j]) {
int tmp = nums2[i];
nums2[i] = nums2[j];
nums2[j] = tmp;
}
}
System.out.print("第" + (i+1) + "次排序:");
for (int j : nums2) {
System.out.print(j + "\t");
}
System.out.println();
}
System.out.print("最终结果:\t");
for (int i : nums2) {
System.out.print(i + "\t");
}
System.out.println("\n-------------------------------------------");
}
}
原始数据: 13 40 12 40 13
第1次排序:13 13 12 40 40
第2次排序:13 13 12 40 40
第3次排序:12 13 13 40 40
第4次排序:12 13 13 40 40
最终结果: 12 13 13 40 40
-------------------------------------------
原始数据: 21 28 48 29 47
第1次排序:21 28 29 47 48
第2次排序:21 28 29 47 48
第3次排序:21 28 29 47 48
第4次排序:21 28 29 47 48
第5次排序:21 28 29 47 48
最终结果: 21 28 29 47 48
-------------------------------------------
原始数据: 49 29 37 10 16
第1次排序:10 49 37 29 16
第2次排序:10 16 49 37 29
第3次排序:10 16 29 49 37
第4次排序:10 16 29 37 49
第5次排序:10 16 29 37 49
最终结果: 10 16 29 37 49
-------------------------------------------