排序演算法(六)

2022-03-31 01:37:24 字數 1504 閱讀 4731

基本思想:

排序的一組數中,對當前還未排好序的範圍內的全部數,自上而下對相鄰的倆個數依次進行比較

和調整,讓較大的數下沉,較小的數往上冒。即:每當倆相鄰的數比較後發現他們的排序與排序的要求相反時,就將他們交換。

氣泡排序示例:

演算法的實現:

public

class

bubblesort2 ;

bubblesort(a,a.length);

for(int i=0; i)

}public

static

void bubblesort(int a,int

n) }}}

}

氣泡排序演算法的改進:對氣泡排序的改進是加入一標誌性變數exchange,用於標誌某一趟排序過程中是否有資料交換,如果進行某一趟排序時,並沒有資料交換,則說明資料已經按要求排列好,可立即結束排序,避免不必要的比較過程,本文提供一下倆種改進演算法:

1、設定一標誌性變數pos,用於記錄每一趟排序過程中最後一交換資料的位置。由於pos位置之後的資料已經按要求排列好了,所以下一趟排序的時候只需要掃瞄到pos位置即可。

改進後演算法如下:

public

class

bubblesort3 ;

bubblesort(a, a.length);

for (int i = 0; i < a.length; i++)

}public

static

void bubblesort(int a, int

n) }

i = pos;//

為下一趟排序作準備

} }

}

2、傳統氣泡排序每一趟氣泡排序只能找到乙個最大值或者最小值,我們考慮利用在每趟排序中進行正向和反向倆遍的冒泡方法一次可以得到倆個值(最大值和最小值),從而使排序趟數幾乎減少一半。

改進後的演算法為:

public

class

bubblesort4 ;

bubblesort(a, a.length);

for (int i = 0; i < a.length; i++)

}public

static

void bubblesort(int a, int

n) }

--high;//

修改high值, 前移一位

for (j = high; j > low; --j)

}++low;//

修改low值,後移一位

} }

}

排序演算法(六) 堆排序

堆定義 堆是一種完全二叉樹,每個結點都大於等於其子結點的稱為大頂堆,每個結點都小於等於其子結點的稱為小頂堆。堆排序定義 將待排序的序列構造成乙個大頂堆,此時堆頂是最大值,將其移到序列最末端後,剩餘的序列重新構造乙個大頂堆,如此反覆直到得到乙個有序序列。時間複雜度 o nlogn 實現 public ...

排序演算法(六) 歸併排序

對於歸併排序,與快速排序一樣,巧妙的應用了分治演算法的核心思想,它將整個序列分成若干組子串行,對這些子串行進行排序後,在一步一步進行合併有序子串行,從而使得整個序列達到有序。但針對於歸併排序,有著兩種不同的排序方式,一是通過整個序列進行著手,將這個序列進行一步一步的劃分,自頂向下進行處理,主要步驟包...

排序演算法 六 歸併排序

歸併排序的基本思想是分治法。先將無序序列分為若干個無序子串行,然後對無序子串行進行排序,最後合併有序子串行,得到完全有序的序列。這就是分解,求解,合併的過程。將待排序序列data 0,1,2 n 1 看成是n個長度為一的序列,將相鄰序列進行合併,得到n 2個長度為2的有序序列 將相鄰序列再次進行合併...