各種排序演算法實現

2021-06-20 17:23:26 字數 2411 閱讀 8826

1 選擇排序

最壞情況:時間複雜度為o(n^2);

平均時間複雜度o(n^2);

最好情況:時間複雜度為o(n^2);

最差空間複雜度:需要輔助空間o(1);不是穩定排序

**實現

void swap(int &a, int &b) 

void selectionsort(int a, int n)

if(k != i) swap(a[i], a[k]);

}}

2 氣泡排序

最壞情況:時間複雜度為o(n^2);

平均時間複雜度o(n^2); 

最好情況:陣列已經排序,時間複雜度為o(n);

最差空間複雜度:需要輔助空間o(1);是穩定排序

**實現

void swap(int &a, int &b) 

void bubblesort(int a, int n)

}

3 直接插入排序

最壞情況:陣列反序,時間複雜度為o(n^2); 

平均時間複雜度o(n^2);

最好情況:陣列已經排好序,時間複雜度為o(n);

最差空間複雜度:總共o(n),需要輔助空間o(1),是穩定排序

**實現

void insertionsort(int a, int n) 

a[j+1] = key;

}}

4 希爾排序

最壞情況:時間複雜度為o(n^2);

平均時間複雜度:o(n^1.25);

最好情況:時間複雜度為o(nlogn);

最差空間複雜度:總共o(n),需要輔助空間o(1);

不是穩定排序

**實現

void shellsort(int a, int n) 

a[j+gap] = key;

} }}

5 歸併排序

典型的分治法,最壞情況:時間複雜度為o(nlogn);

平均時間複雜度o(nlogn);

最好情況:時間複雜度為o(nlgn);

最差空間複雜度:需要輔助空間o(n),是穩定排序

**實現

void merge(int c, int b, int low, int mid, int high) 

if(i > mid)

for(int r = j; j <= high; j++)

b[k++] = c[j];

else

for(int r = i; i <= mid; i++)

b[k++] = c[i];

}void copy(int a, int b, int left, int right)

void mergesort(int a, int left, int right, int b)

}

6 快速排序

典型的分治法,最壞情況:陣列已經排序,每次分割槽都為0個元素與n-1個元素,時間複雜度為o(n^2);

平均時間複雜度o(nlogn);

最好情況:時間複雜度為o(nlogn);

最差空間複雜度:需要輔助空間o(logn);

不是穩定排序

**實現

void swap(int &a, int &b) 

// 每次選擇最右邊元素作為基準將a[p:r]進行分割槽

int partion(int a, int p, int r)

} swap(a[i+1], a[r]);

return i+1;

}void quicksort(int a, int p, int r)

}

7 堆排序

最壞情況:時間複雜度為o(nlogn);

平均時間複雜度o(nlogn);

最好情況:時間複雜度為o(nlogn);

最差空間複雜度:需要輔助空間o(1);不是穩定排序

**實現

void swap(int &a, int &b) 

// 維持堆結構

void maxheap_keep(int a, int i, int heap_size)

}// 建立初始堆, o(n)

void build_maxheap(int a, int n)

void heapsort(int a, int n)

}

各種排序演算法實現

2016年7月7日20 30 37 排序的目的 查詢 排序是查詢的前提 google搜尋 分類 冒泡 穩定o n 2 插入 穩定o n 2 從前往後依次插入到前面的有序部分,始終保持前面部分有序 選擇 n 2 先從所有序列中選擇最小的數字與第乙個數字互換,再從餘下的序列中尋找次最小值與第二個數字互換...

各種排序演算法java實現

插入排序 package org.rut.util.algorithm.support import org.rut.util.algorithm.sortutil author treeroot since 2006 2 2 version 1.0 public class insertsort ...

各種排序演算法java實現

插入排序 package org.rut.util.algorithm.support import org.rut.util.algorithm.sortutil author treeroot since 2006 2 2 version 1.0 public class insertsort ...