亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Java > 正文

Java編程基于快速排序的三個算法題實例代碼

2024-07-13 10:17:17
字體:
來源:轉載
供稿:網友

快速排序原理簡介

快速排序是我們之前學習的冒泡排序的升級,他們都屬于交換類排序,都是采用不斷的比較和移動來實現排序的??焖倥判蚴且环N非常高效的排序算法,它的實現,增大了記錄的比較和移動的距離,將關鍵字較大的記錄從前面直接移動到后面,關鍵字較小的記錄從后面直接移動到前面,從而減少了總的比較次數和移動次數。同時采用“分而治之”的思想,把大的拆分為小的,小的拆分為更小的,其原理如下:對于給定的一組記錄,選擇一個基準元素,通常選擇第一個元素或者最后一個元素,通過一趟掃描,將待排序列分成兩部分,一部分比基準元素小,一部分大于等于基準元素,此時基準元素在其排好序后的正確位置,然后再用同樣的方法遞歸地排序劃分的兩部分,直到序列中的所有記錄均有序為止。

一,最小的k個數

輸入n個數,找出其中最小的k個數,例如輸入4,5,1,6,2,7,3,8,個數字,則最小的數字是1,2,3,4

基于O(n)的算法,可以用基于Partion函數解決這個問題,如果基于數組的第k個數字來調整,使得比第k個數字小的所有數字都位于數組的左邊,比第k個數組大的所有數字都位于數組的右邊,這樣調整之后數組左邊的k個數字就是最小的k個數字,不一定有序

java;">import java.util.Scanner;public class Main {	public static void main(String[] args) {		Scanner in=new Scanner(System.in);		int n=in.nextint();		int k=in.nextint();		int[] num=new int[n];		int[] out=new int[k];		for (int i=0;i<n;i++){			num[i]=in.nextint();		}		Boolean b=GetMinK(n,num,k,out);		if(b){			for (int i=0;i<k;i++){				System.out.print(out[i]+" ");			}		}	}	public static Boolean GetMinK(int uiInputNum, int[] pInputArray, int uiK, int[] pOutputArray){		if(pInputArray==null||pOutputArray==null||uiK>uiInputNum||uiInputNum<=0||uiK<=0){			return false;		}		int start=0;		int end=uiInputNum-1;		int index=partition(pInputArray,start,end);		while(index!=uiK-1){			if(index>uiK-1){				//index在k-1的右邊 				end=index-1;				index=partition(pInputArray,start,end);			} else{				start=index+1;				index=partition(pInputArray,start,end);			}		}		for (int i=0;i<uiK;i++){			pOutputArray[i]=pInputArray[i];		}		return true;	}	//partion分區函數,返回數組a的首元素快排的索引值index 	public static int partition(int[] a,int start,int end){		int privot=a[start];		int i=start;		int j=end;		while(i<j){			while(i<j&&privot<=a[j]){				j--;			}			swap(a,i,j);			while(i<j&&privot>=a[i]){				i++;			}			swap(a,i,j);		}		return i;	}	public static void swap(int[] a,int i,int j){		int t=a[i];		a[i]=a[j];		a[j]=t;	}}

二,數組中出現次數超過一半的數字

數組中有一個數字出現次數超過數組長度的一半,請找出這個數字。例如1,2,3,2,2,2,5,4,2,數字2在數組中出現了5次,超過數組長度的一半,輸出2

受快速排序的啟發,在快速排序中,現在數組中選擇一個數字,然后調整數組中的數字的順序,使得比選中數字小的數字都排在它的左邊,比選中數字大的數字都排在它的右邊。

如果選中的數字的下標剛好是n/2,那么這個數字就是數組中的中位數

import java.util.Scanner;public class Main {	public static void main(String[] args) {		Scanner in=new Scanner(System.in);		int n=in.nextint();		int[] num=new int[n];		for (int i=0;i<n;i++){			num[i]=in.nextint();		}		int b=GetHalfNum(n,num);		if(b!=-1){			System.out.println(b);		}	}	public static int GetHalfNum(int uiInputNum, int[] pInputArray){		if(pInputArray==null||uiInputNum<=0){			return -1;		}		int middle=uiInputNum>>1;		//長度的一半 		int start=0;		int end=uiInputNum-1;		int index=partition(pInputArray,start,end);		while(index!=middle){			//如果不等于長度的一半說明就沒有找到這個中位數 			if(index>middle){				end=index-1;				index=partition(pInputArray,start,end);			} else{				start=index+1;				index=partition(pInputArray,start,end);			}		}		return pInputArray[index];		//index=middle	}	public static int partition(int[] a,int start,int end){		int privot=a[start];		int i=start;		int j=end;		while(i<j){			while(i<j&&privot<=a[j]){				j--;			}			swap(a,i,j);			while(i<j&&privot>=a[i]){				i++;			}			swap(a,i,j);		}		return i;	}	public static void swap(int[] a,int i,int j){		int t=a[i];		a[i]=a[j];		a[j]=t;	}}

三,找出數組中第k個最小的數

例如給定數組1,5,2,6,8,0,6中,第4小的數字是5

import java.util.Scanner;public class Main {	public static void main(String[] args) {		Scanner in=new Scanner(System.in);		int n=in.nextint();		int k=in.nextint();		int[] num=new int[n];		//int[] out=new int[k]; 		for (int i=0;i<n;i++){			num[i]=in.nextint();		}		int b=GetMinK(n,num,k);		if(b!=-1){			System.out.println(b);		}	}	public static int GetMinK(int uiInputNum, int[] pInputArray, int uiK){		if(pInputArray==null||uiK>uiInputNum||uiInputNum<=0||uiK<=0){			return -1;		}		int start=0;		int end=uiInputNum-1;		int index=partition(pInputArray,start,end);		while(index!=uiK-1){			//如果index不是k-1的位置 			if(index>uiK-1){				end=index-1;				index=partition(pInputArray,start,end);			} else{				start=index+1;				index=partition(pInputArray,start,end);			}		}		return pInputArray[index];		//返回的這個位置的數值	}	public static int partition(int[] a,int start,int end){		int privot=a[start];		int i=start;		int j=end;		while(i<j){			while(i<j&&privot<=a[j]){				j--;			}			swap(a,i,j);			while(i<j&&privot>=a[i]){				i++;			}			swap(a,i,j);		}		return i;	}	public static void swap(int[] a,int i,int j){		int t=a[i];		a[i]=a[j];		a[j]=t;	}}

總結

以上就是本文關于Java編程基于快速排序的三個算法題實例代碼的全部內容,希望對大家有所幫助。感興趣的朋友可以繼續參閱本站其他相關專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产v综合v亚洲欧美久久| 亚洲美女激情视频| 欧美高清自拍一区| www国产精品视频| 51视频国产精品一区二区| 亚洲男子天堂网| 久久香蕉国产线看观看av| 亚洲精品国产精品国自产观看浪潮| 亚洲最大成人网色| 色偷偷av一区二区三区乱| 欧美伊久线香蕉线新在线| 亚洲人精选亚洲人成在线| 久久视频在线直播| 国产精品亚洲美女av网站| 欧美成人黑人xx视频免费观看| 日韩精品免费综合视频在线播放| 日本韩国在线不卡| 亚洲午夜精品久久久久久久久久久久| 久久久精品一区二区三区| 亚洲伊人久久综合| 色狠狠av一区二区三区香蕉蜜桃| 91久久国产精品| 日韩美女中文字幕| 91经典在线视频| 一本色道久久88亚洲综合88| 97人人做人人爱| 上原亚衣av一区二区三区| 亚洲japanese制服美女| 亚洲人成毛片在线播放| 日韩精品在线电影| 欧美日韩国产丝袜美女| 国产精品xxxxx| 一个人看的www久久| 97色在线观看免费视频| 国内精品国产三级国产在线专| 日韩av网站导航| 亚洲欧美日韩天堂| 午夜精品久久久久久99热| 国产一区二区三区网站| 黄色成人在线免费| 成人a在线视频| 国产成人在线精品| 成人黄色在线免费| 91亚洲精品在线| 亚洲最大激情中文字幕| 亚洲无线码在线一区观看| 91国产精品91| 日韩中文字幕在线视频播放| 日韩精品在线第一页| 97av在线视频免费播放| 日韩av色综合| 久久综合伊人77777蜜臀| 91久久精品一区| 国产成人小视频在线观看| 91夜夜未满十八勿入爽爽影院| 亚洲综合精品伊人久久| 2019中文字幕在线| 国产欧美一区二区三区久久| 亚洲免费av片| 国产又爽又黄的激情精品视频| 中文字幕在线国产精品| 欧美极品少妇xxxxⅹ免费视频| 日韩一区二区三区在线播放| 久久99久久亚洲国产| www.久久久久久.com| 欧美激情videoshd| 欧美激情xxxx性bbbb| 亚洲影院在线看| 日韩国产欧美精品一区二区三区| 国产精品h在线观看| 日韩精品视频在线免费观看| 91九色国产视频| 欧美黑人xxxx| 欧美性高跟鞋xxxxhd| 亚洲综合社区网| 国产精品一区二区性色av| 精品久久久久人成| 久久国产色av| 神马久久桃色视频| 波霸ol色综合久久| 亚洲国产精品va在看黑人| 亚洲精品xxx| 国产suv精品一区二区三区88区| 国产精品久久久久不卡| 性色av一区二区三区红粉影视| 成人激情春色网| 美乳少妇欧美精品| 欧美视频一区二区三区…| 国产精品99久久久久久www| 亚洲精品小视频在线观看| 午夜精品福利在线观看| 亚洲人成人99网站| 国产精品第一页在线| 久久久国产精品视频| 欧美巨猛xxxx猛交黑人97人| 国产成人短视频| 亚洲大胆人体在线| 国内免费精品永久在线视频| 国产精品91久久久久久| 伊人久久大香线蕉av一区二区| 国产一区二区黑人欧美xxxx| 国内外成人免费激情在线视频| 原创国产精品91| 亚洲美女激情视频| 欧美中文字幕视频| 欧美重口另类videos人妖| 日韩美女视频免费看| 亚洲国产免费av| 欧美成人精品在线| 日韩欧美一区二区三区久久| 久久精品国产一区二区三区| 国产精品电影网| 一区二区三区高清国产| 亚洲色图第一页| 国产一区在线播放| xxxx欧美18另类的高清| 国产精品直播网红| 在线观看日韩欧美| 国产欧美日韩亚洲精品| 国产精品偷伦一区二区| 色偷偷噜噜噜亚洲男人| 国产精品视频一区二区高潮| 日韩欧美亚洲成人| 海角国产乱辈乱精品视频| 日韩中文字幕视频| 在线一区二区日韩| 国产69精品久久久久9999| 国产成人综合亚洲| 国产成人啪精品视频免费网| 亚洲毛片在线看| 8090理伦午夜在线电影| 日韩欧美一区二区三区| 国产日韩精品综合网站| 亚洲国产精品电影在线观看| 性日韩欧美在线视频| 亚洲成人久久电影| 国产成人一区二区三区小说| 午夜精品久久久久久久男人的天堂| 久久久久女教师免费一区| 国产亚洲精品一区二555| 成人网在线视频| 欧美裸体xxxx极品少妇软件| 国产精品福利网| 亚洲精品视频免费在线观看| 色综合久久精品亚洲国产| 视频一区视频二区国产精品| 色一情一乱一区二区| 日韩精品免费电影| 亚洲第一区在线观看| 成人在线视频网站| 国产日韩欧美日韩| 久久免费视频网站| 国产精品户外野外| 17婷婷久久www| 91在线视频精品| 中文字幕日韩精品在线| 美女精品久久久| 亚洲自拍偷拍第一页| 日韩免费在线观看视频| 国产欧美日韩高清| 91情侣偷在线精品国产| 国产精品69精品一区二区三区| 国产日韩欧美在线视频观看| 中文字幕亚洲欧美|