排序演算法彙總

2022-07-15 11:51:13 字數 1676 閱讀 4244

氣泡排序

基本思想:兩兩比較待排序的數,發現反序時交換,直到沒有反序為止。

public static void bubblesort(int r)

}if (noswap)

}}

基本思想:在待排序數列中任選出乙個數作為基準,用這個基準將數列劃分為左右兩個子區,使得左子區的數都不大於基準數,而右子區的數都不小於基準數,稱為完成第一次劃分。如果左子區或右子區不為空,則對它進行同樣的劃分,直至為空為止。 

public static void quicksort(int n,int left,int right)

}//劃分

public static int partition(int r, int left,int right)

while ((r[i] <= temp) && (i < j))

if (i< j)

}//定位基準數

r[i] = temp;

return i;

}

基本思想:每次從無序陣列中選出乙個最小的出來,放到已排好序的陣列的最後。

public static void selectsort(int r)

}//交換r[i]和r[index]

if (index != i)

}

}

基本思想:首先將陣列的第乙個數sortarray[0]看成是有序的,然後從第二個元素開始和它前面的元素進行比較,如果比前面的某乙個數大,就交換。由於前面的元素是有序的,所以就使有序元素的個數逐漸增大,直到等於n。

public void sort(int sortarray)

sortarray[j + 1] = key; //插入到j的後面}}

}

基本思想:通過乙個逐漸減小的增量使乙個陣列逐漸趨近於有序從而達到排序的目的。

public void sortshell(int  list)

list[j-1]=t;}}

}

基本思想:記錄區的分為無序區和有序區前後兩部分;用無序區的數建大根堆,得到的根(最大的數)和無序區的最後乙個數交換,也就是將該根歸入有序區的最前端;如此重複下去,直至有序區擴充套件至整個記錄區。

堆排序步驟:

第一步,根據初始輸入資料,利用堆的調整演算法形成初始堆。

第二步,通過一系列的記錄交換和重新調整堆進行排序。

最大堆的向下調整演算法:

呼叫了o(n)次adjust()演算法,堆排序的時間複雜性為o(nlog2n)。

該演算法的附加儲存主要是執行記錄交換時所用的乙個臨時記錄。

因此,該演算法的空間複雜性為o(1)。

堆排序是乙個不穩定的排序方法。

#include void swap(int &x, int &y)

void adjust(int *a, int parent, int high)

if (r<=high && a[r]>a[flag])

if (flag != parent)

} void heapsort(int *a, int n)

for (i=n-1; i>=0; i--)

}void output(int *a, int n)

{ int i;

for (i=0; i

排序演算法 排序演算法彙總

排序演算法無疑是學習資料結構中的重點內容,本文將給出排序演算法的彙總。下面是具體的實現 include include include define n 1000000 int array n int temp n 1 氣泡排序 void bubblesort int a,int n if tag ...

排序演算法 排序演算法彙總

排序演算法無疑是學習資料結構中的重點內容,本文將給出排序演算法的彙總。下面是具體的實現 include include include define n 1000000 int array n int temp n 1 氣泡排序 void bubblesort int a,int n if tag ...

排序演算法 排序演算法彙總

排序演算法無疑是學習資料結構中的重點內容,本文將給出排序演算法的彙總。下面是具體的實現 include include include define n 1000000 int array n int temp n 1 氣泡排序 void bubblesort int a,int n if tag ...