999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于JAVA語言的常見排序算法分析與比較

2017-03-14 09:25:13奚科芳
科技創(chuàng)新導報 2016年27期

奚科芳

摘 要:該文主要闡述了冒泡排序、插入排序、選擇排序、歸并排序這4種排序算法的基本思想、JAVA實現代碼,通過分析對比得到各種算法的最佳使用場景,從而提高排序的效率。

關鍵詞:排序算法 基本思想 性能比較

中圖分類號:TP312 文獻標識碼:A 文章編號:1674-098X(2016)09(c)-0097-03

Analysis and Comparison of Common Sorting Algorithms Based on JAVA Language

Xi Kefang

(Jinken College of Technology,Nanjing,Jiangsu,210000,China)

Abstract:This articlemainly expounds the bubble sort, insertion sort, selection sort, merge sort, the basic idea of the four kinds of sorting algorithm Java implementation code,we would get the best use of the scene and improve the efficiency of the sortthrough the analysis and comparison of various algorithms.

Key Words:Sorting algorithm;Basic idea;Performance comparison

1 排序算法概述

所謂計算機中的排序,就是使一串記錄,按照其中的某個或某些關鍵字的大小,遞增或遞減的排列起來的操作。而排序算法則是一種能將一串數據依照特定的方式進行排序的一種算法。

根據排序過程中涉及的存儲器不同,可以將排序方法分為兩大類: 一類是內部排序,指的是待排序地記錄存放在計算機隨機存儲器中進行的排序過程。另一類是外部排序,指的是需要對外存儲器進行訪問的排序過程。該課題主要研究幾類常見的內部排序,有冒泡排序、插入排序、選擇排序、歸并排序。

2 常見排序算法基本思想和JAVA代碼實現

2.1 冒泡排序

2.1.1 基本思想

冒泡排序是將相鄰的兩個記錄按關鍵值兩兩比較,如果記錄的次序相反時即進行交換,直到序列中不存在反序的記錄為止。如有n個無序數,第一趟將第一個和第二個進行比較,將大的放在第二個位置,再將第二個和第三比較,大的放在第三個位置,依次向后比較,比較n-1次,將最大的放在最后(n的位置);第二趟,再從第一個開始比較,比較n-2次,這次把最大的放到第n-1個位置,然后再來回比較。遵循第i次遍歷就從第一個數開始比較n-i次,將最后的值放在第n-i+1的位置。如圖1、圖2所示。

2.1.2 JAVA語言實現冒泡排序核心代碼

//冒泡排序:10萬個隨機數用時約25秒

public static voidbubblesort (int a[]){

inti,j,temp;

int n=a。length; //獲得數組長度

for(i=1;i<=n;i++){ //外層循環(huán)控制比較趟數

for( j=0;j

if(a[j]>a[j+1]){//如果相鄰兩數前者比后者大,那交換

temp=a[j];

a[j]=a[j+1];

a[j+1]=temp;

}

}

}

}

2.2 插入排序

2.2.1 基本思想

插入排序是一種簡單的排序方法,它的基本排序思想是依次將待排序的記錄逐一地按其關鍵字值的大小插入到一個已排好序的有序序列中,得到一個新的有序序列,直到所有的記錄插完為止,從而實現排序。在有序情況下只需要經過n-1次比較,在最壞情況下,將需要n(n-1)/2次比較,如圖3所示。

2.2.2 JAVA語言實現插入排序核心代碼

//插入排序:10萬隨機數據用時約7秒

public static void insertsort(int[] arr) {

//插入排序:從小到大,從前往后,先找位置后排序

//外層循環(huán)確定輪次:從第二個到最后一個,n-1輪

int j;

for(inti=1; i

//內存循環(huán)先找位置:從后(i-1)前找,最多找到0

for(j=i-1; j>=0; j--) {

//如果找到了比當前數小的,退出//三種情況都確定了j+1為當前數應該排的位置

if(arr[j]

break;

}

}

//再交換排序

int temp = arr[i];

//從[j+1,i-1]通通往后退一格

for(int k=i-1;k>=j+1;k--) {

arr[k+1] = arr[k];

}//j+1這個位置讓我排

arr[j+1] = temp;

}

}

2.3 選擇排序

2.3.1 基本思想

選擇排序是在待排序的一組數據元素中,選出最小的一個數據元素與第一個位置的數據元素交換;然后在剩下的數據元素當中再找最小的與第二個位置的數據元素交換,循環(huán)到只剩下最后一個數據元素為止。它的比較次數是一定的:n(n-1)/2。因此無論何種序列,正序和反序數據耗時相差不多,相差的只是數據移動時間,對數據的有序性不敏感。它雖然比較次數多,但它的數據交換量卻很少。如圖4所示。

2.3.2 JAVA語言實現選擇排序核心代碼

//選擇排序:10萬隨機數據用時約8秒

public static void selectsort(int[] arr) {

//外層循環(huán)確定輪次(n-1)

int min;

int index;

for(inti=0; i

//內層循環(huán)確定比較和交換范圍

min = arr[i];

index = i;

for(int j=i+1;j

//比較和交換

if(min >arr[j]) {

min = arr[j];

index = j;

}

}

if(i != index) {

int temp = arr[i];

arr[i] = arr[index];

arr[index] = temp;

}

}

}

2.4 歸并排序

2.4.1 基本思想

歸并排序要求待排序列已經部分有序。部分有序的含義是待排序列由若干個有序的子序列組成。歸并排序的基本思想是:將這些有序的子序列進行合并,從而得到有序的序列。合并是一種常見運算,其方法是:比較各子序列的第一個記錄的鍵值,最小的一個就是排序后序列的第一個記錄的鍵值。取出這個記錄,繼續(xù)比較各子序列現在的第一個記錄的鍵值,便可找出排序后的第二記錄。如此繼續(xù)下去,最終可以得到排序結果。因此,歸并排序的基礎是合并,如圖5所示。

2.4.2 JAVA 語言實現歸并排序核心代碼

//歸并排序:10萬隨機數據用時約15毫秒

public static void merge(int[] arr,int from,int mid,int end,int[] temp) {

//分配大數組空間

//int[] arr = new int[a。length+b。length];

//定義三個下標分別指向a,b,arr

inti=from,j=mid+1,k=from;

//比較,取值,直到其中一個數組結束

while(i<=mid && j<=end) {

if(arr[i]

temp[k++] = arr[i++];

}else {

temp[k++] = arr[j++];

}

}

while(i<=mid) {

temp[k++] = arr[i++];

}

while(j<=end) {

temp[k++] = arr[j++];

}

for(int index=from;index<=end;index++) {

arr[index] = temp[index];

}

}

public static void sort(int[] arr,int from,int to,int[] temp) {

if(from < to) {

int mid = (from+to)/2;

//遞歸

sort(arr,from,mid,temp);

sort(arr,mid+1,to,temp);

//合并

merge(arr,from,mid,to,temp);

}

}

3 排序方法的性能比較及選擇

3.1 性能對比

我們可以通過一些基本的性能標準對各個排序方法進行總結對比,見表1。

3.2 影響排序效果的因素

上述介紹的4種排序方法,因為不同的排序方法適應不同的應用環(huán)境和要求,所以選擇合適的排序方法應綜合考慮下列因素:

①待排序的記錄數目n;

②記錄的大小(規(guī)模);

③關鍵字的結構及其初始狀態(tài);

④對穩(wěn)定性的要求;

⑤語言工具的條件;

⑥存儲結構;

⑦時間和輔助空間復雜度等。

3.3 排序方法的選擇

①若n較小(如n≤50),可采用插入排序或選擇排序。當記錄規(guī)模較小時,插入排序較好;否則因為選擇排序移動的記錄數少于插人排序,應選選擇排序為宜。

②若文件初始狀態(tài)基本有序(指正序),則應選用插人排序、冒泡排序為宜;

②若n較大,則應采用時間復雜度為O(nlgn)的排序方法:歸并排序。

綜上所述,在上述排序算法中,不能絕對地說哪個算法是最好的。每種排序算法都有它自己的優(yōu)點及局限性,適用于不同的要求范圍,在選擇時應根據需要適當選用,甚至可將多種算法結合起來使用,效率才會更高。

參考文獻

[1] 謝婷.基于C語言的常用排序算法比較[J].湖南城學院學報:自然科技版,2016,25(4):95-96.

[2] 趙雅青,徐燕.數值排序算法比較分析[J].電腦編程技術與維護,2015(23):5-7.

[3] 李梅云.一些常見數據排序算法的比較[J].漳州職業(yè)技術學院學報,2009(7):60-62.

主站蜘蛛池模板: 成人在线观看不卡| 国产一区二区免费播放| 全部免费毛片免费播放| 国产精品女熟高潮视频| 国产91九色在线播放| 成人在线亚洲| 久久综合色视频| 亚洲中文在线视频| 国产精品.com| 114级毛片免费观看| 99无码熟妇丰满人妻啪啪| 久久精品国产亚洲AV忘忧草18| www亚洲天堂| 午夜毛片免费观看视频 | 激情六月丁香婷婷| 国产欧美日韩资源在线观看| 欧美日韩激情在线| 国产91视频免费| 波多野结衣爽到高潮漏水大喷| 黄色网站在线观看无码| 伊人91视频| a级免费视频| 国产日韩欧美成人| 国产一级α片| 国产精品思思热在线| 午夜一区二区三区| 91在线播放免费不卡无毒| 中文字幕啪啪| 免费日韩在线视频| 亚洲人妖在线| 日韩精品成人在线| 97一区二区在线播放| 免费在线成人网| 国产99免费视频| 国产麻豆永久视频| 久久精品无码国产一区二区三区| 欧美日韩高清在线| 久久久久久国产精品mv| 波多野结衣亚洲一区| 欧美无专区| 国产乱人伦精品一区二区| 亚洲欧美在线综合一区二区三区 | 久久综合色视频| 欧美区一区二区三| 国产成人综合亚洲欧美在| 中国丰满人妻无码束缚啪啪| 看你懂的巨臀中文字幕一区二区| 亚洲性色永久网址| 麻豆精品在线| 午夜国产在线观看| 狠狠亚洲五月天| 日韩精品毛片人妻AV不卡| www.亚洲一区二区三区| 99久久精品国产综合婷婷| 欧美色图第一页| 中国国产A一级毛片| 青草视频在线观看国产| 99re精彩视频| 欧美亚洲日韩中文| 9999在线视频| 精品人妻系列无码专区久久| 国产成人一区免费观看| 色悠久久久| 亚洲无码视频图片| 国产成人一区免费观看| 天天激情综合| 国产成人亚洲无吗淙合青草| 欧美福利在线| 免费啪啪网址| 国产午夜福利亚洲第一| 少妇人妻无码首页| 广东一级毛片| vvvv98国产成人综合青青| 91色在线观看| 亚洲精品国产综合99| 国产最新无码专区在线| 天堂va亚洲va欧美va国产| 国产毛片基地| 国产精品自在线天天看片| 伊人久久婷婷五月综合97色| 伊人久久精品亚洲午夜| 色综合久久久久8天国|