/**
* 功能:排序练习
*
* @author eric (imphp[at]qq[dot]com)
*/
package com.sort;
import java.util.*;
public class Demo1 {
public static void main(String[] args) {
Random random = new Random(100);
int[] arr = random.getRandom();
Bubble bubble = new Bubble(arr);
bubble.show();
/*
* 木桶排序
int[] a = { 3, 1, 2, 3, 4 };
Bucket bucket = new Bucket(a);
bucket.show();
*/
}
}
/**
* 排序
*/
interface Sort {
public void show();
}
/**
* 冒泡排序法 老牌的排序法了
* 外层为循环次数,内层为循环元素判断大小
* 效率很低的排序 O=(N*N)
*
*/
class Bubble implements Sort {
int[] arr = null;
public Bubble(int[] arr) {
this.arr = arr;
}
public void show()
{
int tmp = 0;
// 循环最外层,意味着需要循环多少次,例:5个元素 只需循环4次即可,最后一次不需要循环
for (int i=0; i<this.arr.length-1; i++) {
// 循环里面的元素,同时排序,每次循环的次数为 最外层循环次数-该层 例:5个元素 第二次外部循环为 4-2=2次
// 为什么内层循环为 外层循环次数-该层呢?
// beacuse: 外层循环一次,确定一个元素的位置 ,内层循环的数组中就可以少确定一个元素,故而
// 内层循环次数 = 外层循环次数-该层数
for (int j=0; j<this.arr.length-1-i; j++) {
if (this.arr[j] > this.arr[j+1]) {
tmp = this.arr[j];
this.arr[j] = this.arr[j+1];
this.arr[j+1] = tmp;
}
}
}
for (int i=0; i<this.arr.length; i++) {
System.out.println(this.arr[i]);
}
}
}
/**
* 桶排序 将带排序的数组 定位 K = [1,3,5,1,4] 创建一个木桶,每一个元素可以和对应的数组元素一一对应,每次出现一个元素,则在木桶的相应内容中
* +1 最后循环木桶,打印次数为 对应木桶的值 即可
*
*
* @author
*/
class Bucket implements Sort {
int[] arr = null;
public Bucket(int[] arr) {
this.arr = arr;
}
/**
* 输出循环值 算法思想: 创建一个空数组,元素初始值都为0,循环排序的数组,遇到0.
*
*/
public void show() {
// 创建一个木桶
int[] bucket = new int[5];
// 循环待排序数组,如果数组值等于木桶的下标,则对应的木桶值+1
for (int i = 0; i < this.arr.length; i++) {
bucket[this.arr[i]] += 1;
}
// 循环木桶,打印出各个值
for (int i = 0; i < bucket.length; i++) {
for (int j = 1; j <= bucket[i]; j++) {
System.out.println(this.arr[i]);
}
}
}
}
/**
* 生成随机数
*/
class Random {
// 生成多少个 默认5个吧
int num = 5;
// 生成多少位以内的 默认10位
int length = 0;
public Random(int length) {
this.length = length;
}
public Random() {
this.length = 5;
}
/**
*
* @return
*/
public int[] getRandom() {
int[] arr = new int[this.num];
for (int i = 0; i < this.num; i++) {
arr[i] = (int) (Math.random() * this.length + 1);
}
return arr;
}
/**
* 打印数组
*/
public void show(int[] arr) {
for (int i = 0; i < arr.length; i++) {
System.out.println("数组元素" + arr[i]);
}
}
}
JAVA排序之木桶排序 和 冒泡排序
最新推荐文章于 2022-08-15 16:03:32 发布