亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

java幾種排序算法的實(shí)現(xiàn)及簡(jiǎn)單分析

 更新時(shí)間:2015年05月30日 16:25:39   作者:hitxueliang  
這篇文章主要介紹了java幾種排序算法的實(shí)現(xiàn)及簡(jiǎn)單分析,實(shí)例分析了插入排序、希爾排序、選擇排序等常用排序算法,并分析了各個(gè)算法的優(yōu)劣,需要的朋友可以參考下

本文實(shí)例講述了java幾種排序算法的實(shí)現(xiàn)及簡(jiǎn)單分析。分享給大家供大家參考。具體如下:

package test;
public class first {
/*普通的插入排序*/
public void insertSort(int[] list) {
int i, j;
list[0] = -999;
//相當(dāng)于設(shè)置一個(gè)監(jiān)視哨兵,不用判斷是否越界,
//但要求數(shù)組從第二個(gè)數(shù)開始即i=1開始存儲(chǔ)
for (i = 1; i < list.length; i++) {
j = i;
while (list[j] < list[j - 1]) {
int temp = list[j];
list[j] = list[j - 1];
list[j - 1] = temp;
j = j - 1;
}
}
}
/*折半插入,在直接插入的基礎(chǔ)上,添加二叉查找*/
public void binInsertSort(int[] r, int low, int high) {
for (int i = low + 1; i <= high; i++)
{
int temp = r[i]; // 保存待插入元素
int hi = i - 1;
int lo = low; // 設(shè)置初始區(qū)間
while (lo <= hi)
{ // 折半確定插入位置
int mid = (lo + hi) / 2;
if (temp < r[mid])
hi = mid - 1;
else
lo = mid + 1;
}
for (int j = i - 1; j > hi; j--)
r[j + 1] = r[j]; // 移動(dòng)元素
r[hi + 1] = temp; // 插入元素
}
}
/*希爾排序或shell */
public void shellSort(int[] r, int low, int high, int[] delta){
for (int k=0;k<delta.length;k++)
shellInsert(r, low, high, delta[k]);
}
private void shellInsert(int[] r, int low, int high, int deltaK){
for (int i=low+deltaK; i<=high; i++)
if (r[i]<r[i-deltaK]){
int temp = r[i];
int j = i-deltaK;
for(; j>=low&&temp<r[j]; j=j-deltaK)
r[j+deltaK] = r[j];
r[j+deltaK] = temp;
}
}
/*簡(jiǎn)單的選擇交換*/
public void selectSort(int[] r, int low, int high) {
for (int k = low; k < high - 1; k++) { // 作n-1 趟選取
int min = k;
for (int i = min + 1; i <= high; i++)
// 選擇關(guān)鍵字最小的元素
if (r[i] < r[min])
min = i;
if (k != min) {
int temp = r[k]; // 關(guān)鍵字最小的元素與元素r[k]交換
r[k] = r[min];
r[min] = temp;
}// end of if
}
}
/*堆排序-大頂堆*/
public void heapSort(int[] r){
int n = r.length - 1;
for (int i=n/2; i>=1; i--)
heapAdjust(r,i,n);
for (int i=n; i>1; i--){
int temp = r[1];
r[1] = r[i];
r[i] = temp;
heapAdjust(r,1,i-1);
}
}
//調(diào)整堆
private void heapAdjust(int[] r, int low, int high){
int temp = r[low];
for (int j = 2 * low; j <= high; j = j * 2) {
if (j < high && r[j] < r[j + 1])
j++;
if (temp > r[j])
break;
r[low] = r[j];
low = j;
}
r[low] = temp;
}
public static void main(String[] args) {
first fs = new first();
int[] a = { 100, 9, 8, 9, 9, 7, 7, 0, 0, 99, 55, 7, 6, 5, 4, 3, 2, 1 };
int[] k={5,3,1};
// fs.insertSort(a);
//fs.binInsertSort(a, 0, a.length - 1);
//fs.shellSort(a, 0,a.length-1,k);
//fs.selectSort(a, 0, a.length-1);
fs.heapSort(a);
for (int i = 0; i < a.length; i++) {
System.out.println(a[i]);
}
}
}

插入排序、交換排序、選擇排序、歸并排序等排序方法,都有一個(gè)共同的特點(diǎn),那就是它們都是通過(guò)比較元素的大小來(lái)確定元素之間的相對(duì)位置的,即上述排序方法都是基于比較的排序方法。下面,我們就基于比較的排序方法進(jìn)行一個(gè)對(duì)比和總結(jié)。
我們主要從算法的平均時(shí)間復(fù)雜度、最壞時(shí)間復(fù)雜度、空間復(fù)雜度以及排序的穩(wěn)定性等方面,對(duì)各中排序方法加以比較。

排序方法 平均時(shí)間復(fù)雜度最壞時(shí)間復(fù)雜度空間復(fù)雜度 穩(wěn)定性
直接插入排序 Ο(n2) Ο(n2) Ο(1) 穩(wěn)定
起泡排序 Ο(n2) Ο(n2) Ο(1) 穩(wěn)定
快速排序 Ο(n log n) Ο(n2) Ο(log n) 不穩(wěn)定
簡(jiǎn)單選擇排序 Ο(n2) Ο(n2) Ο(1) 不穩(wěn)定
堆排序 Ο(n log n) Ο(n log n) Ο(1) 不穩(wěn)定
歸并排序 Ο(n log n) Ο(n log n) Ο(n) 穩(wěn)定

從時(shí)間性能上看,快速排序是所有排序算法中實(shí)際性能最好的,然而快速排序在最壞情況下的時(shí)間性能不如堆排序和歸并排序。這一點(diǎn)可以通過(guò)對(duì)快速排序進(jìn)行改進(jìn)來(lái)避免,一種通過(guò)隨機(jī)選擇樞軸元素的隨機(jī)快速排序,可以使得出現(xiàn)最壞情況出現(xiàn)的幾率非常小,在實(shí)際的運(yùn)用中可以認(rèn)為不存在。在堆排序和歸并排序的比較中,當(dāng)n 較大時(shí),歸并排序所需時(shí)間較少,然而它需要較多的輔助存儲(chǔ)空間。

從方法穩(wěn)定性上來(lái)看,大多數(shù)時(shí)間復(fù)雜度為Ο(n2)的排序均是穩(wěn)定的排序方法,除簡(jiǎn)單選擇排序之外。而多數(shù)時(shí)間性能較好的排序方法,例如快速排序、堆排序、希爾排序都是不穩(wěn)定的。一般來(lái)說(shuō),排序過(guò)程中的比較是在相鄰的兩個(gè)元素之間進(jìn)行的排序方法是穩(wěn)定的。

并且,排序方法的穩(wěn)定性是由方法本身決定的,對(duì)于不穩(wěn)定的排序方法而言,不管其描述形式如何,總能找到一種不穩(wěn)定的實(shí)例。

綜上所述,上面討論的所有排序方法中,沒有哪一個(gè)是絕對(duì)最優(yōu)的,在實(shí)際的使用過(guò)程中,應(yīng)當(dāng)根據(jù)不同情況選擇適當(dāng)?shù)呐判蚍椒ā?/p>

希望本文所述對(duì)大家的java程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • Spring Cloud 如何保證微服務(wù)內(nèi)安全

    Spring Cloud 如何保證微服務(wù)內(nèi)安全

    這篇文章主要介紹了Spring Cloud 如何保證微服務(wù)內(nèi)安全的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Java OpenCV實(shí)現(xiàn)人臉識(shí)別過(guò)程詳解

    Java OpenCV實(shí)現(xiàn)人臉識(shí)別過(guò)程詳解

    這篇文章主要介紹了Java OpenCV實(shí)現(xiàn)人臉識(shí)別過(guò)程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-08-08
  • 如何使用Java將word解析出來(lái)(包含格式和圖片)

    如何使用Java將word解析出來(lái)(包含格式和圖片)

    今天遇到一個(gè)讀取word模板內(nèi)容的需求,下面這篇文章主要給大家介紹了關(guān)于如何使用Java將word解析出來(lái),包含格式和圖片,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-12-12
  • 解決JDBC連接Mysql長(zhǎng)時(shí)間無(wú)動(dòng)作連接失效的問(wèn)題

    解決JDBC連接Mysql長(zhǎng)時(shí)間無(wú)動(dòng)作連接失效的問(wèn)題

    這篇文章主要介紹了解決JDBC連接Mysql長(zhǎng)時(shí)間無(wú)動(dòng)作連接失效的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-03-03
  • spring系列筆記之常用注解

    spring系列筆記之常用注解

    這篇文章主要給大家介紹了關(guān)于spring系列筆記之常用注解的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用spring具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • ShardingSphere數(shù)據(jù)庫(kù)讀寫分離算法及測(cè)試示例詳解

    ShardingSphere數(shù)據(jù)庫(kù)讀寫分離算法及測(cè)試示例詳解

    這篇文章主要為大家介紹了ShardingSphere數(shù)據(jù)庫(kù)讀寫分離算法及測(cè)試示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • Spring Boot中使用RabbitMQ的示例代碼

    Spring Boot中使用RabbitMQ的示例代碼

    本篇文章主要介紹了Spring Boot中使用RabbitMQ的示例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-04-04
  • Spring數(shù)據(jù)庫(kù)多數(shù)據(jù)源路由配置過(guò)程圖解

    Spring數(shù)據(jù)庫(kù)多數(shù)據(jù)源路由配置過(guò)程圖解

    這篇文章主要介紹了Spring數(shù)據(jù)庫(kù)多數(shù)據(jù)源路由配置過(guò)程圖解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-06-06
  • Springboot Activemq整合過(guò)程代碼圖解

    Springboot Activemq整合過(guò)程代碼圖解

    這篇文章主要介紹了Springboot Activemq整合過(guò)程代碼圖解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-02-02
  • Spring條件注解沒生效該如何解決

    Spring條件注解沒生效該如何解決

    條件注解相信各位小伙伴都用過(guò),Spring?中的多環(huán)境配置?profile?底層就是通過(guò)條件注解來(lái)實(shí)現(xiàn)的,下面小編就來(lái)為大家介紹一下當(dāng)Spring條件注解沒生效時(shí)該如何解決,感興趣的可以了解下
    2023-09-09

最新評(píng)論