日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

基数排序+速度测试

發布時間:2023/12/3 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基数排序+速度测试 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
package com.atguigu.sort;import java.text.SimpleDateFormat; import java.util.Arrays; import java.util.Date;/*** @創建人 wdl* @創建時間 2021/3/22* @描述*/ public class RadixSort {public static void main(String[] args) {//53, 3, 542, 748, 14, 214 // int arr[] = {53, 3, 542, 748, 14, 214};//創建一個80000個的隨機數組int[] arr = new int[80000];for (int i = 0; i < 80000; i++) {arr[i]=(int)(Math.random()*8000000);//生成一個[0,8000000)數}Date data1 = new Date();SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyy-MM-dd HH:mm:ss");String data1str = simpleDateFormat.format(data1);System.out.println("排序前的時間是="+data1str);radixSort(arr);Date data2 = new Date();String data2str = simpleDateFormat.format(data2);System.out.println("排序后的時間是="+data2str);}//基數排序方法public static void radixSort(int[] arr) {//根據前面的推導過程,我們可以得到最終的基數排序代碼//1.得到數組中最大的數的位數int max = arr[0];//假設第一個數就是最大數for (int i = 1; i < arr.length; i++) {if (arr[i] > max) {max = arr[i];}}//得到最大數是幾位數int maxLength = (max + "").length();//定義一個二維數組,表示10個桶,每個桶就是一個一維數組//說明//1.二維數組包含10個一維數組//2.為了防止在放入數的時候,數據溢出,則每個一維數組(桶),大小定為arr.length//3.明確,基數排序是使用空間換時間的經典算法int[][] bucket = new int[10][arr.length];//為了記錄每個桶中,實際存放了多少個數據,我們定義一個一維數組類記錄各個桶每次放入的數據個數//可以這樣理解//bucketElementCounts[0],記錄的就是bucket[0]桶的放入數據個數int[] bucketElementCounts = new int[10];//這里我們使用循環將代碼處理for (int i = 0,n=1; i < maxLength; i++,n*=10) {//(針對每個元素的對應位進行排序處理),第一次是十位,第二次是百位。。。。for (int j = 0; j < arr.length; j++) {int digitofElement = arr[j]/n % 10;//放入到對應的桶中bucket[digitofElement][bucketElementCounts[digitofElement]] = arr[j];bucketElementCounts[digitofElement]++;}//按照這個桶的排序(一維數組的下標依次取出數據,放入原來的數組)int index = 0;//遍歷每一個桶,并將桶中的數據放入到原來的數組for (int k = 0; k < bucketElementCounts.length; k++) {//如果桶中,有數據,我們才放入到原數組if (bucketElementCounts[k] != 0) {//循環該桶即K個桶(即第K個一維數組),放入for (int l = 0; l < bucketElementCounts[k]; l++) {//取出元素放入到arrarr[index] = bucket[k][l];index++;}}//第1輪處理后,需要將每個bucketElementCounts[k]=0!!!!bucketElementCounts[k] = 0;}// System.out.println("第"+(i+1)+"輪,對個位的排序處理arr=" + Arrays.toString(arr));}// //第1輪(針對每個元素的個位進行排序處理) // for (int j = 0; j < arr.length; j++) { // //取出每個元素的個位 // int digitofElement = arr[j] % 10; // //放入到對應的桶中 // bucket[digitofElement][bucketElementCounts[digitofElement]] = arr[j]; // bucketElementCounts[digitofElement]++; // } // // //按照這個桶的排序(一維數組的下標依次取出數據,放入原來的數組) // int index = 0; // //遍歷每一個桶,并將桶中的數據放入到原來的數組 // for (int k = 0; k < bucketElementCounts.length; k++) { // //如果桶中,有數據,我們才放入到原數組 // if (bucketElementCounts[k] != 0) { // //循環該桶即K個桶(即第K個一維數組),放入 // for (int l = 0; l < bucketElementCounts[k]; l++) { // //取出元素放入到arr // arr[index] = bucket[k][l]; // index++; // } // } // // //第1輪處理后,需要將每個bucketElementCounts[k]=0!!!! // bucketElementCounts[k]=0; // // } // // System.out.println("第1輪,對個位的排序處理arr=" + Arrays.toString(arr));// //第2輪(針對每個元素的十位進行排序處理) // for (int j = 0; j < arr.length; j++) { // //取出每個元素的十位 // int digitofElement = arr[j]/10% 10; // //放入到對應的桶中 // bucket[digitofElement][bucketElementCounts[digitofElement]] = arr[j]; // bucketElementCounts[digitofElement]++; // } // // //按照這個桶的排序(一維數組的下標依次取出數據,放入原來的數組) // index=0; // //遍歷每一個桶,并將桶中的數據放入到原來的數組 // for (int k = 0; k < bucketElementCounts.length; k++) { // //如果桶中,有數據,我們才放入到原數組 // if (bucketElementCounts[k] != 0) { // //循環該桶即K個桶(即第K個一維數組),放入 // for (int l = 0; l < bucketElementCounts[k]; l++) { // //取出元素放入到arr // arr[index] = bucket[k][l]; // index++; // } // } // //第2輪處理后,需要將每個bucketElementCounts[k]=0!!!! // bucketElementCounts[k]=0; // } // // System.out.println("第2輪,對十位的排序處理arr=" + Arrays.toString(arr)); // // // //第3輪(針對每個元素的百位進行排序處理) // for (int j = 0; j < arr.length; j++) { // //取出每個元素的百位 // int digitofElement = arr[j]/10 /10% 10; // //放入到對應的桶中 // bucket[digitofElement][bucketElementCounts[digitofElement]] = arr[j]; // bucketElementCounts[digitofElement]++; // } // // //按照這個桶的排序(一維數組的下標依次取出數據,放入原來的數組) // index=0; // //遍歷每一個桶,并將桶中的數據放入到原來的數組 // for (int k = 0; k < bucketElementCounts.length; k++) { // //如果桶中,有數據,我們才放入到原數組 // if (bucketElementCounts[k] != 0) { // //循環該桶即K個桶(即第K個一維數組),放入 // for (int l = 0; l < bucketElementCounts[k]; l++) { // //取出元素放入到arr // arr[index] = bucket[k][l]; // index++; // } // } // //第3輪處理后,需要將每個bucketElementCounts[k]=0!!!! // bucketElementCounts[k]=0; // } // // System.out.println("第3輪,對百位的排序處理arr=" + Arrays.toString(arr));}}

總結

以上是生活随笔為你收集整理的基数排序+速度测试的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。