<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
彙總:
每輪迴圈確定最值;
public void bubbleSort(int[] nums){ int temp; boolean isSort = false; //優化,發現排序好就退出 for (int i = 0; i < nums.length-1; i++) { for (int j = 0; j < nums.length-1-i; j++) { //每次排序後能確定較大值 if(nums[j] > nums[j+1]){ isSort = true; temp = nums[j]; nums[j] = nums[j+1]; nums[j+1] = temp; } } if(!isSort){ return; } else { isSort = false; } } }
每次選出最值,再交換到邊上;
public void selectSort(int[] nums){ for (int i = 0; i < nums.length-1; i++) { int index = i; int minNum = nums[i]; for (int j = i+1; j < nums.length; j++) { if(nums[j] < minNum){ minNum = nums[j]; index = j; } } if(index != i){ nums[index] = nums[i]; nums[i] = minNum; } } }
對迴圈的每個數找到屬於自己的位置插入;
public void insertionSort(int[] nums){ for (int i = 1; i < nums.length; i++) { int j = i; int insertNum = nums[i]; while(j-1 >= 0 && nums[j-1] > insertNum){ nums[j] = nums[j-1]; j--; } nums[j] = insertNum; } }
選一個基本值,小於它的放一邊,大於它的放另一邊;
public void quickSortDfs(int[] nums, int left, int right){ if(left > right){ return; } int l = left; int r = right; int baseNum = nums[left]; while(l < r){ //必須右邊先走 while(nums[r] >= baseNum && l < r){ r--; } while(nums[l] <= baseNum && l < r){ l++; } int temp = nums[l]; nums[l] = nums[r]; nums[r] = temp; } nums[left] = nums[l]; nums[l] = baseNum; quickSortDfs(nums, left, r-1); quickSortDfs(nums, l+1, right); }
分治演演算法;
//歸 public void mergeSortDfs(int[] nums, int l, int r){ if(l >= r){ return; } int m = (l+r)/2; mergeSortDfs(nums, l, m); mergeSortDfs(nums, m+1, r); merge(nums, l, m, r); } //並 private void merge(int[] nums, int left, int mid, int right){ int[] temp = new int[right-left+1]; int l = left; int m = mid+1; int i = 0; while(l <= mid && m <= right){ if(nums[l] < nums[m]){ temp[i++] = nums[l++]; } else { temp[i++] = nums[m++]; } } while(l <= mid){ temp[i++] = nums[l++]; } while(m <= right){ temp[i++] = nums[m++]; } System.arraycopy(temp, 0, nums, left, temp.length); }
引入步長減少數位交換次數提高效率;
public void shellBubbleSort(int[] nums){ for (int step = nums.length/2; step > 0 ; step /= 2) { for (int i = step; i < nums.length; i++) { for (int j = i-step; j >= 0; j -= step) { if(nums[j] > nums[j+step]){ int temp = nums[j]; nums[j] = nums[j+step]; nums[j+step] = temp; } } } } }
public void shellInsertSort(int[] nums){ for (int step = nums.length/2; step > 0; step /= 2) { for (int i = step; i < nums.length; i++) { int j = i; int insertNum = nums[i]; while(j-step >= 0 && nums[j-step] > insertNum){ nums[j] = nums[j-step]; j-=step; } nums[j] = insertNum; } } }
大頂堆實現升序,每次將最大值移到堆的最後一個位置上;
public void heapSort2(int[] nums) { for(int i = nums.length/2-1; i >= 0; i--){ sift(nums, i, nums.length); } for (int i = nums.length-1; i > 0; i--) { int temp = nums[0]; nums[0] = nums[i]; nums[i] = temp; sift(nums, 0, i); } } private void sift(int[] nums, int parent, int len) { int value = nums[parent]; for (int child = 2*parent +1; child < len; child = child*2 +1) { if(child+1 < len && nums[child+1] > nums[child]){ child++; } if(nums[child] > value){ nums[parent] = nums[child]; parent = child; } else { break; } } nums[parent] = value; }
按順序統計每個數出現次數;
public void countSort(int[] nums){ int max = Integer.MIN_VALUE; int min = Integer.MAX_VALUE; for(int num : nums){ max = Math.max(max, num); min = Math.min(min, num); } int[] countMap = new int[max-min+1]; for(int num : nums){ countMap[num-min]++; } int i = 0; int j = 0; while(i < nums.length && j < countMap.length){ if(countMap[j] > 0){ nums[i] = j+min; i++; countMap[j]--; } else { j++; } } }
類似計數排序,不同點在於統計的是某個區間(桶)裡的數;
public void bucketSort(int[] nums){ int max = Integer.MIN_VALUE; int min = Integer.MAX_VALUE; for(int num : nums){ max = Math.max(max, num); min = Math.min(min, num); } int bucketCount = (max-min)/nums.length+1; List<List<Integer>> bucketList = new ArrayList<>(); for (int i = 0; i < bucketCount; i++) { bucketList.add(new ArrayList<>()); } for(int num : nums){ int index = (num-min)/nums.length; bucketList.get(index).add(num); } for(List<Integer> bucket : bucketList){ Collections.sort(bucket); } int j = 0; for(List<Integer> bucket : bucketList){ for(int num : bucket){ nums[j] = num; j++; } } }
按個、十、百位依次歸類排序;
public void radixSort(int[] nums){ int min = Integer.MAX_VALUE; int max = Integer.MIN_VALUE; for (int num : nums) { min = Math.min(min, num); max = Math.max(max, num); } for (int i = 0; i < nums.length; i++) { nums[i] -= min; } max -= min; int maxLen = (max+"").length(); int[][] bucket = new int[nums.length][10]; int[] bucketCount = new int[10]; for (int i = 0, n = 1; i < maxLen; i++, n*=10) { for (int num : nums) { int digitVal = num / n % 10; bucket[bucketCount[digitVal]][digitVal] = num; bucketCount[digitVal]++; } int index = 0; for (int j = 0; j < bucketCount.length; j++) { if(bucketCount[j] > 0){ for (int k = 0; k < bucketCount[j]; k++) { nums[index] = bucket[k][j]; index++; } } bucketCount[j] = 0; } } for (int i = 0; i < nums.length; i++) { nums[i] += min; } }
public void priorityQueueSort(int[] nums){ PriorityQueue<Integer> queue = new PriorityQueue<>(); for(int num : nums){ queue.offer(num); } for (int i = 0; i < nums.length; i++) { nums[i] = queue.poll(); } }
public void arraysApiSort(int[] nums){ Arrays.sort(nums); }
到此這篇關於Java 常見排序演演算法程式碼分享的文章就介紹到這了,更多相關Java 常見排序演演算法內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45