常用的排序演算法彙總

2021-07-01 22:41:32 字數 1760 閱讀 1807

1 氣泡排序

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

時間複雜度:o(n2)

空間複雜度:o(1)

void buruebblesort(int* ary, int length)

} }}

2 快速排序

基本思想:在待排序數列中任選出乙個數作為基準,用這個基準數將數列劃分為左右兩個子區,使得左子區的數都不大於基準數,

而右子區的數都不小於基準數,至此完成第一次劃分。如果左子區域不為空,則對它進行同樣的劃分,直至為空為止。

時間複雜度:o(n*log2n)

空間複雜度:o(log2n)~o(n)

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;

}

3 直接選擇排序

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

時間複雜度:o(n2)

空間複雜度:o(1)

public static void selectsort(int r)

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

if (index != i)

}

}

4 插入排序

基本思想:首先將陣列的第乙個數sortarray[0]看成是有序的,然後從第二個元素開始和它前面的元素進行比較,如果比前面的某乙個數打,

就交換。由於前面的元素是有序的,所以就使用序的元素的個數逐漸增大,知道等於n。

時間複雜度:o(n2)

空間複雜度:o(1)

public void sort(int sortarray)

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

} }

}

5 希爾排序

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

時間複雜度:o

空間複雜度:o(1)

public void sortshell(int  list)

list[j-1]=t;

} }

}

6 堆排序

基本思想:記錄區的分為無序區和有序區前後兩部分;用無序區的數建大根堆,得到的根(最大的數)和無序區的最後乙個數交換,

也就是將該根歸入有序區的最前端;如此重複下去,直至有序區擴充套件至整個記錄區。

時間複雜度:o(n*log2n)

空間複雜度:o(1)

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

排序演算法無疑是學習資料結構中的重點內容,本文將給出排序演算法的彙總。下面是具體的實現 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 ...