java中的快速排序

來源:互聯網
上載者:User

標籤:java   基數排序   歸併排序   快速排序   

自己在網上找的,可以學學

快速排序

(1)基本思想:選擇一個基準元素,通常選擇第一個元素或者最後一個元素,通過一趟掃描,將待排序列分成兩部分,一部分比基準元素小,一部分大於等於基準元素,此時基準元素在其排好序後的正確位置,然後再用同樣的方法遞迴地排序劃分的兩部分。

(2)執行個體:

(3)用java實現
public class quickSort {inta[]={49,38,65,97,76,13,27,49,78,34,12,64,5,4,62,99,98,54,56,17,18,23,34,15,35,25,53,51};publicquickSort(){quick(a);for(int i=0;i<a.length;i++){System.out.println(a[i]);}}publicint getMiddle(int[] list, int low, int high) {int tmp =list[low];    //數組的第一個作為中軸while (low < high){while (low < high&& list[high] >= tmp) {high--;}list[low] =list[high];   //比中軸小的記錄移到低端while (low < high&& list[low] <= tmp) {low++;}list[high] =list[low];   //比中軸大的記錄移到高端}list[low] = tmp;              //中軸記錄到尾return low;                   //返回中軸的位置}publicvoid _quickSort(int[] list, int low, int high) {if (low < high){int middle =getMiddle(list, low, high);  //將list數組進行一分為二_quickSort(list, low, middle - 1);       //對低字表進行遞迴排序_quickSort(list,middle + 1, high);       //對高字表進行遞迴排序}}publicvoid quick(int[] a2) {if (a2.length > 0) {    //查看數組是否為空白_quickSort(a2,0, a2.length - 1);}}}
歸併排序
(1)基本排序:歸併(Merge)排序法是將兩個(或兩個以上)有序表合并成一個新的有序表,即把待排序序列分為若干個子序列,每個子序列是有序的。然後再把有序子序列合并為整體有序序列。
(2)執行個體:

(3)用java實現
import java.util.Arrays;publicclass mergingSort {inta[]={49,38,65,97,76,13,27,49,78,34,12,64,5,4,62,99,98,54,56,17,18,23,34,15,35,25,53,51};publicmergingSort(){sort(a,0,a.length-1);for(int i=0;i<a.length;i++)System.out.println(a[i]);}publicvoid sort(int[] data, int left, int right) {// TODO Auto-generatedmethod stubif(left<right){//找出中間索引int center=(left+right)/2;//對左邊數組進行遞迴sort(data,left,center);//對右邊數組進行遞迴sort(data,center+1,right);//合并merge(data,left,center,right);}}publicvoid merge(int[] data, int left, int center, int right) {// TODO Auto-generatedmethod stubint [] tmpArr=newint[data.length];int mid=center+1;//third記錄中間數組的索引int third=left;int tmp=left;while(left<=center&&mid<=right){//從兩個數組中取出最小的放入中間數組if(data[left]<=data[mid]){tmpArr[third++]=data[left++];}else{tmpArr[third++]=data[mid++];}}//剩餘部分依次放入中間數組while(mid<=right){tmpArr[third++]=data[mid++];}while(left<=center){tmpArr[third++]=data[left++];}//將中間數組中的內容複寫回原數組while(tmp<=right){data[tmp]=tmpArr[tmp++];}System.out.println(Arrays.toString(data));}}
基數排序

(1)基本思想:將所有待比較數值(正整數)統一為同樣的數位長度,數位較短的數前面補零。然後,從最低位開始,依次進行一次排序。這樣從最低位排序一直到最高位排序完成以後,數列就變成一個有序序列。

(2)執行個體:


(3)用java實現

import java.util.ArrayList;import java.util.List;public class radixSort {inta[]={49,38,65,97,76,13,27,49,78,34,12,64,5,4,62,99,98,54,101,56,17,18,23,34,15,35,25,53,51};public radixSort(){sort(a);for(inti=0;i<a.length;i++){System.out.println(a[i]);}}public  void sort(int[] array){//首先確定排序的趟數;int max=array[0];for(inti=1;i<array.length;i++){if(array[i]>max){max=array[i];}}int time=0;//判斷位元;while(max>0){max/=10;time++;}//建立10個隊列;List<ArrayList> queue=newArrayList<ArrayList>();for(int i=0;i<10;i++){ArrayList<Integer>queue1=new ArrayList<Integer>();queue.add(queue1);}//進行time次分配和收集;for(int i=0;i<time;i++){//分配數組元素;for(intj=0;j<array.length;j++){//得到數位第time+1位元;int x=array[j]%(int)Math.pow(10,i+1)/(int)Math.pow(10, i);ArrayList<Integer>queue2=queue.get(x);queue2.add(array[j]);queue.set(x, queue2);}int count=0;//元素計數器;//收集隊列元素;for(int k=0;k<10;k++){while(queue.get(k).size()>0){ArrayList<Integer>queue3=queue.get(k);array[count]=queue3.get(0);queue3.remove(0);count++;}}}}}



著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

java中的快速排序

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.