package com.example.demo.code30;
import java.util.Arrays;
import java.util.Random;
/**
* @author ming
* @create 2022/5/29
* @description:
*/
public class DataChecker {
static int[] generateRandomArray(){
Random r = new Random();
int[] arr = new int[1000];
for (int i = 0; i < arr.length;i++) {
arr[i] = r.nextInt(10000);
}
return arr;
}
static void check(){
int[] arr = generateRandomArray();
int [] arr2 = new int[arr.length];
System.arraycopy(arr,0,arr2,0,arr.length);
Arrays.sort(arr);
//用自己的排序排一遍arr2
tongSort(arr2);
boolean same = true;
for (int i = 0; i < arr2.length; i++) {
if(arr[i]!=arr2[i]){
same = false;
}
}
System.out.print(same==true?"right ":"wrong");
}
static void swap(int [] arr,int i,int j){
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
static void selectSort(int[] arr){
for (int i = 0; i < arr.length-1; i++) {
int min = i;
for (int j = i+1; j <arr.length ; j++) {
if(arr[min]>arr[j]){
min = j;
}
}
swap(arr,i,min);
}
}
static void bubboSort(int[] arr){
for (int i = arr.length-1; i >0 ; i--) {
for (int j = 0;j<i;j++){
if(arr[j]>arr[j+1]){
swap(arr,j,j+1);
}
}
}
}
static void insertSort(int[] arr){
for (int i = 1; i < arr.length; i++) {
for (int j = i; j>0 ; j--) {
if(arr[j-1]>arr[j]){
swap(arr,j,j-1);
}else{
break;
}
}
}
}
static void shellSort(int[] arr){
int h = arr.length/2;
while(h>=1){
for (int i = h; i <arr.length ; i++) {
for (int j = i; j>=h ; j-=h) {
if(arr[j-h]>arr[j]){
swap(arr,j,j-h);
}else{
break;
}
}
}
h = h/2;
}
}
static void guiBingSort(int[] arr,int left,int right){
if(left>=right) {
return;
}
int mid = left+(right-left)/2;
guiBingSort(arr,left,mid);
guiBingSort(arr,mid+1,right);
myMergerSort(arr,left,mid,right);
}
static void guiBingSort(int[] arr){
guiBingSort(arr,0,arr.length-1);
}
private static void myMergerSort(int[] arr, int left, int mid, int right) {
int[] temp = new int[right-left+1];
int index = 0;
int leftPoint = left;
int rightPoint = mid+1;
while(leftPoint<=mid&&rightPoint<=right){
if(arr[leftPoint]<=arr[rightPoint]){
temp[index++]=arr[leftPoint++];
}else{
temp[index++] = arr[rightPoint++];
}
}
while(leftPoint<=mid){
temp[index++] = arr[leftPoint++];
}
while(rightPoint<=right){
temp[index++] = arr[rightPoint++];
}
for (int m = 0; m <temp.length; m++) {
arr[left++] = temp[m];
}
}
static void heapSort(int[] arr){
int[] heapArr = new int[arr.length+1];
System.arraycopy(arr,0,heapArr,1,arr.length);
//创建堆
createHeap(heapArr);
int n = heapArr.length-1;
while(n>1){
swap(heapArr,1,n);
n--;
sink(heapArr,1,n);
}
System.arraycopy(heapArr,1,arr,0,arr.length);
}
static void myQuickSort(int[] arr){
myQuickSortDigui(arr,0,arr.length-1);
}
static void myQuickSortDigui(int[] arr,int start,int end){
if(start>=end){
return ;
}
int pivot = getPivot(arr,start,end);
myQuickSortDigui(arr,start,pivot-1);
myQuickSortDigui(arr,pivot+1,end);
}
private static int getPivot(int[] arr, int start, int end) {
int left = start;
int right = end;
int pivot = arr[right];
while(left<right){
while(left<right&&arr[left]<=pivot){
left++;
}
while(left<right&&arr[right]>=pivot){
right--;
}
if(left<right){
swap(arr,left,right);
}
}
swap(arr,end,left);
return left;
}
static void countSort(int[] arr){
int max = arr[0];
for (int i = 0; i < arr.length; i++) {
if(max<arr[i]){
max = arr[i];
}
}
int[] countArray = new int[max+1];
for (int i = 0; i < arr.length; i++) {
countArray[arr[i]]++;
}
int index = 0;
for (int i = 0; i < countArray.length; i++) {
while(countArray[i]>0){
arr[index++] = i;
countArray[i]--;
}
}
}
static void tongSort(int[] arr){
//计算最高位
int max = arr[0];
for (int i = 0; i < arr.length; i++) {
if(max<arr[i]){
max = arr[i];
}
}
int d = 0;
while(max>0){
max = max/10;
d++;
}
int[][] tongArray = new int[10][arr.length];
//记录每个桶中放的个数
int[] count = new int[10];
int n=1;
int j = 0;
while(d>0){
for (int i = 0; i < arr.length; i++) {
j= arr[i]/n%10;
tongArray[j][count[j]++]=arr[i];
}
//从桶中取数
int index = 0;
for (int i = 0; i < 10; i++) {
int m= 0;
while(count[i]>0){
arr[index] = tongArray[i][m++];
count[i]--;
index++;
}
}
//将桶计数变为0
for (int i = 0; i < count.length; i++){
count[i] = 0;
}
d--;
n = n*10;
}
}
private static void createHeap(int[] heapArr) {
for (int i = heapArr.length/2; i >0 ; i--) {
sink(heapArr,i,heapArr.length-1);
}
}
static void sink(int[] heapArr,int i,int n){
while(2*i<=n){
int max = 0;
if(2*i+1<=n){`在这里插入代码片`
if(heapArr[2*i]<=heapArr[2*i+1]){
max = 2 * i + 1;
}else{
max = 2 * i;
}
}else{
max = 2 * i;
}
if(heapArr[max]>heapArr[i]){
swap(heapArr,max,i);
i = max;
}else{
break;
}
}
}
public static void main(String[] args) {
for (int i = 0; i < 1000; i++) {
check();
}
}
}
十大排序算法代码
最新推荐文章于 2024-04-11 21:12:06 发布