十大排序演算法(c )

2021-09-24 16:42:05 字數 2935 閱讀 5749

1. 氣泡排序

每一輪都從頭開始比較, 比較當前數與後一位數,若當前數大於後一位數則進行交換,每一輪都會在末尾得到一位排序正確的數,因此每一輪比較結束,下一輪的比較範圍將縮小(ja[j + 1])

}if (!ischange)

break;

}}2. 插入排序

每一輪將當前數(a[i])插入到前面已經排序好的合適位置,因此關鍵是如何找到該合適位置通過不斷比較以及移動來找到合適的位置

void insertionsort(int *a, int n)

} a[j + 1] = value;

}}

3.希爾排序

插入排序的改進

void shellsort(int* a,int n)

a[j + d] = value;

} d = d / 2;

}}

4. 選擇排序

每一輪從未排序的陣列中,選擇最小的數放在排序陣列的後面,有n個數,需要進行n-1次選擇,第一次選出最小的數,第二次選擇第2小的數,第三次選出第3小的數。。。。

void selectionsort(int *a,int n)

if (i != min)

}}

5.歸併排序

分治思想,從下而上進行排序

void merge(int *a, int l, int mid, int r)

for (int j = mid + 1; j <= r; j++)

int m = 0, n = 0, t = l;

while (m < (mid - l + 1) && n < (r - mid)) //迴圈比較左邊和右邊陣列,選出最小的數並重新放回原陣列(t++)

while(m < (mid - l + 1)) //判斷左邊陣列是否有剩餘,若有則直接放在原陣列a的後面

a[t++] = l[m++];

while(n < (r - mid))

a[t++] = r[n++];

delete l, r; //釋放記憶體

}void mergesort(int *a, int l, int r)

6. 快速排序

分治思想,從上而下排序

int findpivot(int *a, int start, int end)

a[start] = pivot; //此時start=end,

return start;

}void quicksort(int *a, int start, int end)

7. 堆排序

堆排序的思路為:先建立乙個大頂堆,然後迴圈交換堆頂元素和最後乙個元素,並且重新調整大頂堆

void makeheap(int *a, int i, int n)  //大頂堆建立方法(從上而下調整堆結構)

else break; //若最大值還是原來的根節點,則不需要調整,直接退出即可 }

}void heaksort(int *a,int n) //堆排序的實現

for (int i = n - 1; i >= 0; i--) //將堆頂的最大值,放在陣列末尾,然後重新調正大頂堆,此時只需要從根節點往下調整一次即可

}

8. 計數排序

以空間換時間

void countsort(int *a, int n)

int *temp = new int[max+1]; //建立臨時陣列,陣列下標表示原陣列的元素,如:temp[20]=2,表示a中20 出現兩次

for (int i = 0; i < max + 1; i++)

temp[i] = 0;

for (int i = 0; i < n; i++)

temp[a[i]]++;

int index = 0;

for (int i = 0; i < max + 1; i++)

delete temp; //釋放記憶體

}

9.桶排序

同樣是以空間換取時間

void bucketsort(int* a,int n)

for (int i = 0; i < 5; i++)

temp[i][n] = 0; //每個桶的最後一位表示桶中的元素個數

for (int i = 0; i < n; i++)

int i = 0;

for (int j = 0; j < 5; j++)

int maxnum = 0;

int max1 = max;

while (max1!=0) //確定原陣列中最大值的位數,桶排序需要進行maxnun次排序

int** temp = new int*[10]; //建立10個桶

for (int i = 0; i < 10; i++)

int d = 1;

while (maxnum>0)

int j = 0;

int q = 0;

while (q<10)

temp[q][n] = 0;//將桶中用於表示桶內資料個數的值置為0,以便下次使用桶

}q++;

}maxnum--;

d = d * 10;

}for (int i = 0; i < 10; i++)

delete temp;

}

十大排序演算法(C )

原理 比較相鄰兩個元素,如果前乙個比後乙個大則交換二者位置 以公升序為例 每進行一輪比較則可以把最大的元素放到相對最後的位置。每進行一輪比較就會有乙個元素變為有序。迴圈對每輪越來越少的元素進行比較則最終變為有序序列。如果序列元素初始時為有序,則一輪則可進行排序完畢,最好時間複雜度為o n 如果序列元...

十大排序演算法

1.非線性時間類排序 時間複雜度未突破 0 nlog 2n 不穩定的四個排序演算法 選擇排序 0 n2 希爾排序 0 n1.3 希爾排序實現python 快速排序 0 n log2 n 0 nlog 2n 0 nlog 2 n 快速排序實現c python 堆排序 0 n log2 n 0 nlog...

十大排序演算法

排序規則 從左至右依次增大 一 基於比較的排序演算法 插入排序 逐個遍歷未排序序列,將其在已排序序列中從右到左比較,直到遇到比自己小的數,然後將元素插入到那個數的後面,有序序列從左向右生長。選擇排序 在未排序序列中選擇最小的元素,將其插入到已排序序列的末尾,有序序列從左向右生長。氣泡排序 從左至右逐...