排序演算法彙總

2022-08-15 19:27:16 字數 2707 閱讀 6961

排序是計算機內經常進行的一種操作,其目的是將一組「無序」的資料元素調整為「有序」的資料元素。常用的排序演算法有選擇排序、插入排序、氣泡排序、希爾排序、歸併排序、快速排序、交換排序等。

1. 選擇排序

基本思想:每一趟(例如第 i 趟,i = 0, 1, ..., n-2)在後面 n-i 個帶排序的資料元素中選出關鍵字最小的元素,作為有序元素序列的第 i 個元素

時間複雜度:o(n^2)

空間複雜度:o(1)

是否穩定:不穩定

示例**:

void swap(int array, int k, int

i)int selectsort(int a, int

len)

}swap(a, k, i);

}return0;

}

2. 插入排序

基本思想:當插入第 i(i >= 1)個元素時,前面的v[0], v[1], ..., v[i-1]已經排好序,這是,用v[i]的關鍵字與v[i-1], v[i-2], ... 的關鍵字進行比較,找到插入位置即將v[i]插入,原來位置上的物件向後順移。

時間複雜度:o(n^2)

空間複雜度:o(1)

是否穩定:穩定

示例**:

int insertsort(int a, int

len)

a[k] =temp;

}return0;

}

3. 氣泡排序

基本思想:設待排序資料元素序列中的元素個數為n,最多做 n-1 趟,i = 1, 2, ..., n-1。在第 i 趟中從後向前, j = n-1, n-2, ..., i,兩兩比較v[j-1]和v[j]的關鍵字。如果發生逆序,則交換v[j-1]和v[j]

時間複雜度:o(n^2)

空間複雜度:o(1)

是否穩定:穩定

示例**:

void swap(int array, int k, int

i)int bubblesort(int a, int

len)}}

return0;

}

4. 希爾排序

基本思想:將待排序序列劃分為若干組,在每一組內進行插入排序, 以使整個序列基本有序,然後再對整個序列進行插入排序

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

空間複雜度:o(1)

是否穩定:不穩定

示例**:

void swap(int array, int i, int

j)void shellsort(int array, int len) //

o(n*n)

array[k] =temp;}}

while( gap > 1

);

}

5. 快速排序

基本思想:將待排序序列劃分為若干組,在每一組內進行插入排序, 以使整個序列基本有序,然後再對整個序列進行插入排序

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

空間複雜度:o(1)

是否穩定:不穩定

示例**:

void swap(int array, int i, int

j)int partition(int array, int low, int

high)

swap(array, low, high);

while( (low < high) && (array[low] <=pv) )

swap(array, low, high);

}return

low;

}void qsort(int array, int low, int

high)

}void quicksort(int array, int len) //

o(n*logn)

6. 歸併排序

基本思想:每一趟(例如第 i 趟,i = 0, 1, ..., n-2)在後面 n-i 個帶排序的資料元素中選出關鍵字最小的元素,作為有序元素序列的第 i 個元素

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

空間複雜度:o(1)

是否穩定:穩定

示例**:

void swap(int array, int i, int

j)void merge(int src, int des, int low, int mid, int

high)

else

}while( i <=mid )

while( j <=high )

}void msort(int src, int des, int low, int high, int

max)

else

free

(space);

}}void mergesort(int array, int len) //

o(n*logn)

7. 交換排序

前提條件:一組1, 2, ... , n陣列,各個元素不能重複。

基本思想:通過交換,把a[0] = 1, a[1] = 2, ... , a[n-1] = n

時間複雜度:o(n)

空間複雜度:o(1)

示例**:

int swapsort(int a, int

len)

}return0;

}

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

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