0
点赞
收藏
分享

微信扫一扫

数据结构:桶排序

王栩的文字 2022-02-24 阅读 83
数据结构

桶排序 

 

 

 

 


import java.util.ArrayList;
import java.util.Arrays;
import java.util.Random;

public class 桶排序 {
public static void main(String[] args) {
//创建由20个随机数组成的数组
Random r = new Random();
int[] arr = new int[20];
int n = 0;
for (int i = 0; i < 20; i++) {
arr[n] = r.nextInt(100);
n++;
}
System.out.println(Arrays.toString(arr));
bucketSort(arr);
System.out.println(Arrays.toString(arr));
}

public static void bucketSort(int[] arr) {
//确定桶的数量
int max = arr[0];
int min = arr[0];
for (int i : arr) {
if (i > max) {
max = i;
}
if (i < min) {
min = i;
}
}
ArrayList<ArrayList<Integer>> bucket = new ArrayList<>();
int count = (max - min) / arr.length + 1;
//将桶初始化
for (int i = 0; i < count; i++) {
bucket.add(new ArrayList<>());
}
//把元素放入对应的桶中
for (int i : arr) {
bucket.get((i - min) / arr.length).add(i);
//这一步是先根据元素的数值算出对应的桶,再把元素加入到桶中
}
//把每个桶进行排序,可以采用任意一种排序方法,这里用冒泡排序的方法
for (int i = 0; i < count; i++) {
HeapSort3(bucket.get(i));
}
//遍历每个桶的每个数据,并存放到数组中
int x = 0;
for (ArrayList<Integer> array : bucket) {
for (Integer i : array) {
arr[x] = i;
x++;
}
}
}


//从后往前比并加判断
public static void HeapSort3(ArrayList<Integer> arr) {
//一共要比arr.length-1趟
for (int n = 0; n < arr.size() - 1; n++) {
//从后往前比,小的往前放,每趟比完了以后,最小的到了前面
//每趟从最后开始比,到n
boolean flag = false;//假设没有发生交换
for (int x = arr.size() - 2; x >= n; x--) {
if (arr.get(x) > arr.get(x + 1)) {
swap(arr, x, x + 1);
flag = true;//发生交换就修改标记
}
}
if (!flag) {
//如果没有发生交换,可以退出循环
break;
}
}
}

public static void swap(ArrayList<Integer> arr, int x, int y) {
int temp = arr.get(x);
arr.set(x, arr.get(y));
arr.set(y, temp);
}
}

 

举报

相关推荐

0 条评论