package test;
import java.security.SecureRandom;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
/**算法思想:依次比较相邻两个元素,如果他们的顺序错误就把他们调换过来,直到没有元素再需要交换,排序完成。**/
public class Algorithm {
public static void main(String[] args) {
// TODO Auto-generated method stub
List<Integer> array = new ArrayList<Integer>();
array = getRandomList(10, 100);
bubbleSort(array);
System.out.println(array.toString());
}
/**
* 冒泡排序
*
* @Title bubbleSort
* @param array需要排序的数据
* @Author: YHM
*/
static void bubbleSort(List<Integer> array) {
for (int i = 0; i < array.size() - 1; i++) {
boolean flag = true;// true 表示此次循环没有交换,待排序列已经有序,排序结束
for (int j = 0; j < array.size() - 1 - i; j++) {
if (array.get(j) > array.get(j + 1)) {
swap(array, j, j + 1);
flag = false;
}
}
if (flag) {
break;
}
}
}
/**
* 交换数组中两个数的位置
*
* @Title swap
* @param array数组
* @param i索引
* @param j索引
* @Author: YHM
*/
static void swap(List<Integer> array, int i, int j) {
array.set(i, array.get(i) + array.get(j));
array.set(j, array.get(i) - array.get(j));
array.set(i, array.get(i) - array.get(j));
}
/**
* 不带种子,每次的随机数不同
*
* @Title getRandomList
* @param count产生的随机数的个数
* @param max产生的随机数的范围
* @return 随机数列表
* @Author: YHM
*/
static ArrayList<Integer> getRandomList(int count, int max) {
ArrayList<Integer> list = new ArrayList<>();
Random rand = new Random();
for (int i = 0; i < count; i++) {
int temp = rand.nextInt(max);
list.add(temp);
}
return list;
}
/**
* 带种子,每次的随机数相同
*
* @Title getRandomList
* @param count产生的随机数的个数
* @param max产生的随机数的范围
* @return 随机数列表
* @Author: YHM
*/
static ArrayList<Integer> getRandomList(int count, int max, int seed) {
ArrayList<Integer> list = new ArrayList<>();
Random rand = new Random(seed);
for (int i = 0; i < count; i++) {
int temp = rand.nextInt(max);
list.add(temp);
}
return list;
}
/**
* 生成完全不重复的随机数
*
* @Title getRandomList
* @param count产生的随机数的个数
* @param max产生的随机数的范围
* @return 随机数列表
* @Author: YHM
*/
static ArrayList<Integer> getRandomListNoRepeat(int count, int max) {
ArrayList<Integer> list = new ArrayList<>();
SecureRandom rand = new SecureRandom();
for (int i = 0; i < count; i++) {
int temp = rand.nextInt(max);
list.add(temp);
}
return list;
}
}