자바 버 전 10 대 정렬 고전 알고리즘:전체 코드(4)
간단 한 설명:이 정렬 알고리즘 은 이름 을 봐 도 이해 하기 쉽다.즉,추가 로 배열 을 찾 아 계산 한 다음 에 이 배열 에서 어 릴 때 부터 크 거나 작은 숫자 에서 꺼 내 면 된다.
전체 코드:
package com.keafmd.Sequence;
/**
* Keafmd
*
* @ClassName: CountSort
* @Description:
* @author:
* @date: 2021-06-24 11:31
*/
public class CountSort {
public static void countSort(int[]arr){
countSort(arr,true);
}
public static void countSort(int[]arr,boolean ascending){
int d,min=arr[0],max=arr[0];
// 、
for(int i=0;i< arr.length;i++){
if(arr[i]<min){
min =arr[i];
}
if(arr[i]>max){
max = arr[i];
}
}
//
d = min;
int[] count_map = new int[max-min+1];
for(int i=0;i< arr.length;i++){
count_map[arr[i]-d]++;
}
int k =0;
if(ascending){
for(int i=0;i< arr.length;){
if(count_map[k]>0){
arr[i] = k+d;
i++;
count_map[k]--;
}else
k++;
}
}else {
for(int i=arr.length-1;i>=0;){
if(count_map[k]>0){
arr[i] = k+d;
i--;
count_map[k]--;
}else
k++;
}
}
}
}
통 정렬간단 한 설명:한 배열 을 몇 개의 통(사실은 몇 개의 구간 으로 나 누 어 작은 것 부터 큰 것 까지 또는 큰 것 에서 작은 몇 개의 구간 까지)으로 나 누 어 담 은 다음 에 각 통(구간)을 질서 있 게 한 다음 에 꺼 내 서 함께 놓 으 면 된다.몇 개의 질서 있 는 구간 을 꺼 내 서 함께 놓 는 것 과 마찬가지 로 자 연 스 럽 게 질서 있 게 해 야 한다.당연히 구간 의 순서에 따라 꺼 내야 한다.
전체 코드:
package com.keafmd.Sequence;
import java.util.ArrayList;
import java.util.Collections;
/**
* Keafmd
*
* @ClassName: BucketSort
* @Description:
* @author:
* @date: 2021-06-24 13:32
*/
public class BucketSort {
public static void bucketSort(int[] arr){
bucketSort(arr,true);
}
public static void bucketSort(int[] arr,boolean ascending){
if(arr==null||arr.length==0){
return;
}
//
int max = Integer.MIN_VALUE;
int min = Integer.MAX_VALUE;
for(int i=0;i<arr.length;i++){
max = Math.max(arr[i],max);
min = Math.min(arr[i],min);
}
//
int bucketNUm = (max-min)/ arr.length+1;
ArrayList<ArrayList<Integer>> bucketArr = new ArrayList<>(bucketNUm);
for(int i=0;i<bucketNUm;i++){
bucketArr.add(new ArrayList<>());
}
//
for(int i=0;i<arr.length;i++){
int num = (arr[i]-min)/ (arr.length);
bucketArr.get(num).add(arr[i]);
}
//
for (int i = 0; i < bucketArr.size(); i++) {
// ,
Collections.sort(bucketArr.get(i));
}
//
int index;
if(ascending){
index=0;
}else{
index=arr.length-1;
}
for(int i=0;i<bucketArr.size();i++){
for(int j= 0;j<bucketArr.get(i).size();j++){
arr[index] = bucketArr.get(i).get(j);
if(ascending){
index++;
}else{
index--;
}
}
}
}
}
기수 정렬간단 한 설명:먼저 말 하면 많은 사람들 이 쓴 기수 정렬 은 정수 만 정렬 할 수 있다 는 것 을 알 게 되 었 습 니 다.사실은 처리 하기 만 하면 음 수 를 포함 하 는 것 을 정렬 할 수 있 습 니 다.바로 우리 가 정렬 하기 전에 모든 수 를 전체적으로 늘 리 는 것 입 니 다(즉,가장 작은 음 수 를 줄 이 는 것 입 니 다.즉,더 한 것 입 니 다).모두 정수 가 된 다음 에 정렬 을 한 후에 줄 이 는 것 입 니 다(가장 작은 음 수 를 더 한 것 입 니 다.줄 었 으 면 좋 겠 다.기수 정렬 은 숫자 정렬 에 따라 LSD(최저 비트[즉 개 비트]부터 정렬)와 MSD(최고 비트 부터 정렬)로 나 눌 수 있 으 며,아래 에 쓰 인 일 은 LSD 기수 정렬 입 니 다.기수 순 서 는 바로 숫자 를 위치 별로 고려 하 는 것 이다.그 다음 에 우리 의 한 자릿수 는[0,9]밖 에 안 된다.바로 우리 가 어떤 분(개 위,백 위·)을 고려 할 때 이 자리 의 숫자 만 보고[0,9]에 해당 하 는 위치 에 놓 은 다음 에 순서대로 꺼 내 서 마지막 에 다른 자리 에 따라 이렇게 조작 하 는 것 이다.
전체 코드:
package com.keafmd.Sequence;
/**
* Keafmd
*
* @ClassName: RadixSort
* @Description:
* @author:
* @date: 2021-06-24 14:32
*/
public class RadixSort {
public static void radixSort(int[] arr){
radixSort(arr,true);
}
public static void radixSort(int[]arr,boolean ascending){
int max = Integer.MIN_VALUE;
int min = Integer.MAX_VALUE;
// 、
for (int i = 0; i < arr.length; i++) {
max = Math.max(max, arr[i]);
min = Math.min(min, arr[i]);
}
if (min<0) { // 0, , 0
for (int i = 0; i < arr.length; i++) {
arr[i] -= min;
}
max -= min; //max !
}
//
int maxLength = (max+"").length();
int[][] bucket = new int[10][arr.length]; // , 0 9,
int[] bucketElementCount = new int[10]; // 0 9
for (int i = 0 ,n = 1 ; i < maxLength ; i++,n*=10) { //
for (int j = 0; j < arr.length ; j++) {
int value = arr[j]/n % 10;
bucket[value][bucketElementCount[value]] = arr[j];
bucketElementCount[value]++;
}
//
if(ascending) {
int index = 0;
// ,
for (int j = 0; j < bucketElementCount.length; j++) {
if (bucketElementCount[j] != 0) {
for (int k = 0; k < bucketElementCount[j]; k++) {
arr[index] = bucket[j][k];
index++;
}
}
bucketElementCount[j] = 0;
}
}else { //
int index=0;
// ,
for (int j = bucketElementCount.length-1; j >=0; j--) {
if (bucketElementCount[j] != 0) {
for (int k = 0; k <bucketElementCount[j]; k++) {
arr[index] = bucket[j][k];
index++;
}
}
bucketElementCount[j] = 0;
}
}
/*for (int i1 = 0; i1 < arr.length; i1++) {
System.out.print(arr[i1]+" ");
}
System.out.println();*/
}
if (min<0){
for (int i = 0; i < arr.length ; i++) {
arr[i] += min;
}
}
}
}
전체 테스트 클래스
package com.keafmd.Sequence;
import java.util.*;
import java.util.stream.IntStream;
import java.util.stream.Stream;
/**
* Keafmd
*
* @ClassName: Sort
* @Description:
* @author:
* @date: 2021-06-16 21:27
*/
public class Sort {
public static void main(String[] args) {
int[] nums = {12, 4, 25, 47, 58, 34, 25, 9, 99, 26, 1, -13, 162, 10093, -66, -1};
// int[] nums = {12, 43,56,42,26,11};
int[] temparr;
// Collections.sort
// int Integer
//1、 int
temparr = nums.clone();
IntStream stream = Arrays.stream(temparr);
//2、 , ---->int Integer
Stream<Integer> integerStream = stream.boxed();
//3、
Integer[] integers = integerStream.toArray(Integer[]::new);
// List
List<Integer> tempList = new ArrayList<>(Arrays.asList(integers));
// Collections.sort()
System.out.println(" Collections.sort() :");
//Collections.sort
Collections.sort(tempList, new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o1-o2;
//return o2-o1;
}
});
//tempList.sort
/* tempList.sort(new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
//return o1-o2;
return o2-o1;
}
});*/
//
for (Integer integer : tempList) {
System.out.print(integer+" ");
}
System.out.println();
//
System.out.println(" :");
temparr = nums.clone();
BubbleSort.bubbleSort(temparr);
//
//BubbleSort.bubbleSort(temparr,false);
for (int i = 0; i < temparr.length; i++) {
System.out.print(temparr[i] + " ");
}
System.out.println();
//
System.out.println(" :");
temparr = nums.clone();
QuickSort.quickSort(temparr);
//QuickSort.quickSort(temparr,false);
for (int i = 0; i < temparr.length; i++) {
System.out.print(temparr[i] + " ");
}
System.out.println();
//
System.out.println(" :");
temparr = nums.clone();
SelectSort.selectSort(temparr);
//SelectSort.selectSort(temparr,false);
for (int i = 0; i < temparr.length; i++) {
System.out.print(temparr[i] + " ");
}
System.out.println();
//
System.out.println(" :");
temparr = nums.clone();
HeapSort.heapSort(temparr);
//HeapSort.heapSort(temparr,false);
for (int i = 0; i < temparr.length; i++) {
System.out.print(temparr[i] + " ");
}
System.out.println();
//
System.out.println(" :");
temparr = nums.clone();
MergeSort.mergeSort(temparr);
//MergeSort.mergeSort(temparr,false);
for (int i = 0; i < temparr.length; i++) {
System.out.print(temparr[i] + " ");
}
System.out.println();
//
System.out.println(" :");
temparr = nums.clone();
StraghtInsertSort.straghtInsertSort(temparr);
//StraghtInsertSort.straghtInsertSort(temparr,false);
for (int i = 0; i < temparr.length; i++) {
System.out.print(temparr[i] + " ");
}
System.out.println();
//
System.out.println(" :");
temparr = nums.clone();
ShellSort.shellSort(temparr);
//ShellSort.shellSort(temparr,false);
for (int i = 0; i < temparr.length; i++) {
System.out.print(temparr[i] + " ");
}
System.out.println();
//
System.out.println(" :");
temparr = nums.clone();
CountSort.countSort(temparr);
//CountSort.countSort(temparr,false);
for (int i = 0; i < temparr.length; i++) {
System.out.print(temparr[i] + " ");
}
System.out.println();
//
System.out.println(" :");
temparr = nums.clone();
BucketSort.bucketSort(temparr);
//BucketSort.bucketSort(temparr,false);
for (int i = 0; i < temparr.length; i++) {
System.out.print(temparr[i] + " ");
}
System.out.println();
//
System.out.println(" :");
temparr = nums.clone();
RadixSort.radixSort(temparr);
//RadixSort.radixSort(temparr,false);
for (int i = 0; i < temparr.length; i++) {
System.out.print(temparr[i] + " ");
}
System.out.println();
}
}
총결산이 글 은 여기까지 입 니 다.당신 에 게 도움 을 줄 수 있 기 를 바 랍 니 다.또한 당신 이 우리 의 더 많은 내용 에 관심 을 가 져 주 실 수 있 기 를 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.