数组的排序
排序的方式:
1、冒泡排序
2、选择排序
3、中位数排序
输出10个随机数进行排列
排序前:
public static void main(String[] args) {
Random rand = new Random();
int[] array = new int[10];
int size = 0;
array[size++] = 1+rand.nextInt(100);
boolean no;
for (int t;size<array.length;){
t = 1+rand.nextInt(100);
no = true;
for (int j = 0; j <size ; j++) {
if (array[j] == t){
no = false;
break;
}
}
if (no){
array[size++] = t;
}
}
System.out.println("排序前:");
for (int i : array) {
System.out.println(i);
}
}
冒泡排序(依次和右边的数进行比较,如果比右边大则往右排)
//外层循环控制轮数
for (int i = 0,t; i < array.length-1; i++) {
//内循环控制每一轮比较多少次,找左边大的
for (int j = 0; j <array.length-1 ; j++) {
if (array[j]>array[j+1]){
t = array[j];
array[j] = array[j+1];
array[j+1] = t;
}
}
System.out.println("排序后:");
for (int a : array) {
System.out.println(a);
}
}
}
选择排序(假设一个最大数)
for (int i = 0,maxVallx,maxIx,t; i <array.length-1 ; i++) {
maxVallx = 0; //假设最大值的下标为0,并通过内层循环进行验证调整
maxIx = array.length-1-i; //最大下标在每一轮是固定的
for (int j = 1; j <maxIx ; j++) {
if (array[maxVallx]<array[j]){
maxVallx = j;
}
}
if (maxVallx != maxIx){
t = array[maxVallx];
array[maxVallx] = array[maxIx];
array[maxIx] = t;
}
}
System.out.println("排序后:");
for (int i : array) {
System.out.println(i);
}
中位数排序
即
//找中位数排序 相对中位数
int begin = 0;
int end = array.length-1;
int mid = array[0],t; //假设数组的第一个数为中位数
while(begin<end) {
while (begin < end && mid <= array[end]) {//从后往前,小于mid的输出
end--;//往前遍历
}
while (begin < end && mid >= array[begin]) {//从前往后,大于mid的输出
begin++;
}
if (begin < end) {
t = array[begin];
array[begin] = array[end];
array[end] = t;
}
}
if (0!=begin){//改地方为begin和end相遇的地方,将其与mid换位置
array[0] = array[begin];
array[begin] = mid;
}
System.out.println("排序后:");
for (int i : array) {
System.out.println(i);
}