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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python堆排序求topn_Java堆排序,取得前TopN个数

發布時間:2023/12/15 python 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python堆排序求topn_Java堆排序,取得前TopN个数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

import java.util.Random;

/**

* Created with IntelliJ IDEA.

* User: pengfei.hpf

* Date: 14-4-29

* Time: 上午11:45

* To change this template use File | Settings | File Templates.

*/

public class HeapSortUtil {

/**

* 用堆排序方法 找出前N個最大的數

* @originalArray 原始數據數組

* @topN 需要取得的N個最大數

* @return 包含topN個最大數的數組

*/

public int[] getTopArray(int[] originalArray,int topN){

int len = originalArray.length ;

if(len <= topN){

return originalArray;

}

int[] array = new int [topN];

initHeap(originalArray);

int temp;

for(int i=0;i

array[i]= originalArray[0];

temp=originalArray[originalArray.length-i-1];

originalArray[originalArray.length-i-1]=originalArray[0];

originalArray[0]=temp;

buildHeap(0,originalArray.length-i-1,originalArray);

}

return array;

}

/**

* 創建初始無序堆

*/

private void initHeap(int[] orignalArr){

for(int i=orignalArr.length-1;i>=0;i--){

buildHeap(i,orignalArr.length,orignalArr);

}

}

/**

* 調整堆

* @param location 起始位置

* @param unSortLength 無序堆的長度

*/

private void buildHeap(int location,int unSortLength,int[] arr){

int temp;

int tempLoc;

//判斷該父節點是否有左右孩子

if((tempLoc = (location+1)*2)

if(arr[tempLoc]>arr[tempLoc-1]){//如果右節點大于左節點

if(arr[tempLoc]>arr[location]){//如果右節點大于父節點 就雙方交換值

temp = arr[location];

arr[location] = arr[tempLoc];

arr[tempLoc] = temp;

buildHeap(tempLoc,unSortLength,arr);//遞歸

}

}else{//如果左節點大于右節點

if(arr[tempLoc-1]>arr[location]){//如果左節點大于父節點

temp = arr[location];

arr[location] = arr[tempLoc-1];

arr[tempLoc-1] = temp;

buildHeap(tempLoc-1,unSortLength,arr);//遞歸

}

}

}else if((tempLoc =((location+1)*2-1))

if(arr[tempLoc]>arr[location]){//如果右節點大于父節點

temp = arr[location];

arr[location] = arr[tempLoc];

arr[tempLoc] = temp;

buildHeap(tempLoc,unSortLength,arr);//遞歸

}

}

}

public static void main(String[] args) {

int[] arr =new int[100000];

Random ran = new Random();

for (int i = 0; i < arr.length; i++) {

arr[i] = ran.nextInt(100000);

}

HeapSortUtil h = new HeapSortUtil();

long start = System.currentTimeMillis();

int topArr[] = h.getTopArray(arr, 20);

//打印出排序后的數組

for(int i=0;i

System.out.println(topArr[i]);

}

long end = System.currentTimeMillis()-start;

System.out.println("Total time:" + end + "ms");

}

}

總結

以上是生活随笔為你收集整理的python堆排序求topn_Java堆排序,取得前TopN个数的全部內容,希望文章能夠幫你解決所遇到的問題。

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