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

首頁 > 編程 > Java > 正文

java算法-排序

2019-11-06 06:31:49
字體:
來源:轉載
供稿:網友

一直都有寫技術博客的想法,以前由于儲備知識不夠,一直沒寫。如今在女朋友的支持下,開始嘗試寫寫技術博客,就當方便自己查找的工具貼吧。好了,廢話不說了,上干貨。

排序算法大體分為5大類:選擇排序,插入排序,交換排序,歸并排序,基數排序

一.交換排序(冒泡排序+快速排序)

1.冒泡排序

冒泡排序的核心思想就是將權重輕的氣泡上升到序列最前(對于升序排列),而對于降序排列則反之。

由于使用java寫的,所以要使用到java當中的一些特性,比如泛型和比較類

根據比較類comparator來判斷是升序排列還是降序排列,comparator中的compare函數返回a > b ? 1 : (a < b ? -1 : 0),是升序排列,返回a > b ? -1 : (a < b ? 1 : 0),則是降序排列

冒泡排序的基本思路是:

①假定整個數組都是無序區域②無序區域第一個氣泡一次和后續氣泡進行比較③不滿足排序規則的氣泡,則讓兩個氣泡交換位置④一趟遍歷過后,有序區域出現一個氣泡,無序區域還剩下n-1個氣泡⑤重復①~④步驟

public static <T> void bubbleSort(T[] t, Comparator<? super T> comparator) {		int size = t == null ? 0 : t.length;		T temp = null;   // 用于記錄臨時數據		for(int i = 0; i < size - 1; i++) {			for(int j = i + 1; j < size; j++) {				// 交換兩個數的位置				if(comparator.compare(t[i], t[j]) > 0) {					temp = t[i];					t[i] = t[j];					t[j] = temp;				}			}		}	}時間復雜度:O(n^2)

空間復雜度:O(1)

二.快速排序

快速排序主要用到了分治法的基本思想,分治法就是將一個原問題分解成幾個規模更小但是結構和原問題相似的子問題,然后遞歸解決。

根據比較類comparator來判斷是升序排列還是降序排列,comparator中的compare函數返回a > b ? 1 : (a < b ? -1 : 0),是升序排列,返回a > b ? -1 : (a < b ? 1 : 0),則是降序排列

快速排序基本思路:① 選擇第一個數為基準值②從左到右遍歷,遍歷到第一個比基準值大的數為止③從右向左遍歷,遍歷到第一個比基準值小的數為止④步驟②和步驟③所在的元素進行交換⑤重復②~④,這樣的得出過結果是一側是全比基準點小的元素,一側是全比基準點大的元素⑥對兩側元素分別進行遞歸計算

public static <T> void quickSort(T[] t, int start, int end, Comparator<? super T> comparator) {   	    if (start < end) {   	        T base = t[start]; // 選定的基準值(第一個數值作為基準值)   	        T temp;            // 記錄臨時中間值   	        int i = start, j = end;   	        while(i < j) {   	            while((comparator.compare(t[i] ,base) < 0) && (i < end)) {  	                i++;   	            }	            while((comparator.compare(t[j], base) > 0) && (j > start)) {   	                j--;   	            }	            if(i <= j) {   	                temp = t[i];   	                t[i] = t[j];   	                t[j] = temp;   	                i++;   	                j--;   	            }   	        }   	        if(start < j) { 	        	quickSort(t, start, j, comparator);   // 對低字段表進行遞歸排序	        }	        if(end > i) {	        	quickSort(t, i, end, comparator);     // 對高字段表進行遞歸排序	        }	    }   	}

時間復雜度:O(nlog2n)

空間復雜度:O(log2n)

測試一下算法的性能吧,選用不同的排序算法對程序整體的性能影響還是挺大的。

首先需要打亂已知數組的順序思路:①假定已知數組是一個有序序列②隨機一個有序序列的索引,該所在的元素和有序序列最后一個元素交換③有序序列的最后一個元素加入到無序序列中④重復①~③時間復雜度:O(n)空間復雜度:O(1)

public static <T> void disturbOrder(T[] t) {		int size = t == null ? 0 : t.length;		if(size != 0) {			int randCount = 0; // 索引			int position = 0;  // 當前位置			T temp;			do {    				Random rand = new Random();  				int r = size - randCount;  				position = rand.nextInt(r);    			 	randCount++;  			 	// 將隨機出的索引所在的位置的數據和r位數據進行交換			 	temp = t[position];			 	t[position] = t[r - 1]; 			 	t[r - 1] = temp;		 	} while (randCount < size);		}	}

簡單寫個測試程序

public static void main(String[] args) {		Integer[] numbers = new Integer[10000];		for(int i = 0; i < numbers.length; i++) {			numbers[i] = i;		}		disturbOrder(numbers);		long start = System.currentTimeMillis();		quickSort(numbers, 0, numbers.length - 1, new Comparator<Integer>() {			@Override			public int compare(Integer a, Integer b) {				return a > b ? 1 : (a < b ? -1 : 0);			}		});		long end = System.currentTimeMillis();		System.out.PRintln("快速排序耗時:" + (end - start));				disturbOrder(numbers);		long start1 = System.currentTimeMillis();		bubbleSort(numbers, new Comparator<Integer>() {			@Override			public int compare(Integer a, Integer b) {				return a > b ? 1 : (a < b ? -1 : 0);			}		});		long end1 = System.currentTimeMillis();		System.out.println("冒泡排序耗時:" + (end1 - start1));}控制臺打印結果:

快速排序耗時:43ms冒泡排序耗時:225ms


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美限制级电影在线观看| 亚洲一区二区三| 国产91热爆ts人妖在线| 亚洲国产精品久久久久秋霞不卡| 欧美福利小视频| 精品视频在线播放| 97精品国产91久久久久久| 91成人福利在线| 日韩av在线天堂网| 久久精品视频在线观看| 日韩电视剧免费观看网站| 国产在线播放91| 欧美大全免费观看电视剧大泉洋| 91精品在线看| 成人av.网址在线网站| 国产成人av网址| 欧美最猛性xxxxx(亚洲精品)| 久久久欧美一区二区| 98精品国产自产在线观看| 国色天香2019中文字幕在线观看| 日韩专区在线播放| 麻豆国产精品va在线观看不卡| 国产日韩精品在线观看| 亚洲成人在线视频播放| 欧美性猛交xxxx久久久| 岛国视频午夜一区免费在线观看| 欧美性猛交xxxx黑人| 亚洲第一免费网站| 亚洲偷欧美偷国内偷| 精品国产拍在线观看| 日韩中文字幕不卡视频| 欧美精品www在线观看| 中文字幕欧美日韩va免费视频| 亚洲一区二区三区四区在线播放| 日韩欧美中文第一页| 久久国产精品久久久久| 国产精品精品一区二区三区午夜版| 久国内精品在线| 久久人人爽人人爽人人片亚洲| 久久久日本电影| 日韩在线国产精品| 少妇高潮 亚洲精品| 日本亚洲欧美成人| 国产精品成av人在线视午夜片| 久久中文字幕视频| 97av在线影院| 欧美日韩亚洲视频一区| 久久久999精品视频| 日韩欧美在线视频免费观看| 91精品国产自产在线观看永久| 欧美与黑人午夜性猛交久久久| 亚洲精品网站在线播放gif| 91精品久久久久久久久中文字幕| 国产成人精品久久| 国产成人综合亚洲| 亚洲精品丝袜日韩| 亚洲成av人影院在线观看| 欧美一级免费看| 午夜精品美女自拍福到在线| 欧美xxxx做受欧美.88| 一区二区三欧美| 国产精品高清网站| 亚洲高清福利视频| 欧美日韩激情美女| 亚洲日本中文字幕免费在线不卡| 国产视频观看一区| 91精品啪在线观看麻豆免费| 国模视频一区二区| 亚洲美女动态图120秒| 亚洲欧美日韩一区二区三区在线| 青青青国产精品一区二区| 成年无码av片在线| 国产精品国产三级国产aⅴ浪潮| 日韩激情av在线免费观看| 亚洲电影免费观看高清| 日韩av资源在线播放| 国产精品福利无圣光在线一区| 国产一区二区三区在线观看网站| 91久久久久久久久久| 日韩中文字幕网| 亚洲第一天堂无码专区| 久久全球大尺度高清视频| 欧美黑人一区二区三区| 欧美激情一区二区三区在线视频观看| 国产精品美女www爽爽爽视频| 久久精品国产亚洲一区二区| 国产成人精品日本亚洲| 在线成人一区二区| 欧美激情精品久久久久久黑人| 国产日韩欧美自拍| 亚洲片在线资源| 伊人久久精品视频| 91精品国产自产在线老师啪| 亚洲国产精品yw在线观看| 永久555www成人免费| 一夜七次郎国产精品亚洲| 日av在线播放中文不卡| 国产精品久久久久999| 国产一区二区av| 日韩亚洲成人av在线| 欧美日韩一区二区免费视频| 国产美女精品视频| 欧美激情一区二区久久久| 91精品综合视频| 中文字幕免费精品一区| 国产精品成人一区二区| 国产日韩av在线播放| 国产精品免费电影| 亚洲一区中文字幕在线观看| 日韩成人免费视频| 亚洲成人在线视频播放| 国产日韩欧美在线视频观看| 最近2019免费中文字幕视频三| 欧美在线视频免费| 伊人久久免费视频| 欧美精品videofree1080p| 亚洲第一区第二区| 26uuu日韩精品一区二区| 国产日韩欧美自拍| 欧美精品亚州精品| 亚洲人午夜精品免费| 91av在线国产| 国产精品视频公开费视频| 国产精品成av人在线视午夜片| 欧美巨乳美女视频| 日韩中文字幕精品视频| 欧美大肥婆大肥bbbbb| 伦伦影院午夜日韩欧美限制| 亚洲福利在线视频| 久久久精品在线观看| 日韩美女免费观看| 欧美亚洲另类制服自拍| 亚洲已满18点击进入在线看片| 91精品免费久久久久久久久| 91网站在线免费观看| 久久亚洲欧美日韩精品专区| 久久精品电影网站| 亚洲人成在线观看| 欧美日韩在线观看视频小说| 亚洲国产私拍精品国模在线观看| 最近2019中文字幕大全第二页| 精品网站999www| 久久精品福利视频| 久久精品国产电影| 国产成人鲁鲁免费视频a| 亚洲国模精品私拍| 亚洲天堂av在线免费观看| 国产精品国内视频| 国产在线高清精品| 中文字幕日韩欧美精品在线观看| 亚洲午夜未删减在线观看| 欧美性受xxx| 久久久亚洲国产天美传媒修理工| 日韩电影免费在线观看| 亚洲第一视频网站| 亚洲一区第一页| 九九视频这里只有精品| 欧美成人激情视频免费观看| 在线不卡国产精品| 精品自拍视频在线观看| 中文字幕免费精品一区| 亚洲精品第一页| 亚洲国产精品久久久久| 欧美精品成人91久久久久久久|