// 氣泡排序
void bubble(int a,int n)
} }
}
// 選擇排序
void select_sort(int a, int n)//n為陣列a的元素個數
// 將第i 小的數,放在第i 個位置;如果剛好,就不用交換
if ( i != min_index)
} }
// 插入排序
typedef int elementtype;
void insertionsort(elementtype a, int n)
} index = j + 1;
for (k = i - 1; k >= index; k--)
a[k+1] = a[k];
a[index] = tmp;
}*/
// 優化
for (i = 1; i < n; i++)
a[j+1] = tmp;
} }
// 希爾排序:縮小增量排序
typedef int elementtype;
void shellsort(elementtype a, int n)
a[j] = tmp;
} }
}
// 堆排序
// 交換兩個int 型別變數的內容
void swap(int *x, int *y)
// 下沉(大根堆)
void sink(int k, int a, int n) }
// 建大根堆
void buildheap(int a, int n) }
// 堆排序
void heapsort(int a, int n)
}
// 歸併排序
// 合併兩個有序的部分
void merge(int a, int tmparray, int lpos, int rpos, int rightend)
while (lpos <= leftend)
tmparray[tmppos++] = a[lpos++];
while (rpos <= rightend)
tmparray[tmppos++] = a[rpos++];
for (i = 0; i < numelements; i++, rightend--)
a[rightend] = tmparray[rightend];
} void msort(int a, int tmparray, int left, int right) }
void mergesort(int a, int n)
// 快速排序
// 遞迴
void swap(int v, int i, int j)
void quicksort(int v, int n)
swap(v, 0, last);
quicksort(v, last);
quicksort(v + last + 1, n - last - 1); }
// 非遞迴
void swap(int v, int i, int j)
int partition(int a, int low, int high)
void quicksor***(int a, int n)
if (m + 1 < h)
} }
}
選擇排序、快速排序、希爾排序、堆排序不是穩定的排序演算法,而氣泡排序、插入排序、歸
並排序和基數排序是穩定的排序演算法。
七大排序演算法
七大排序分類 插入排序 直接插入排序 穩定 希爾排序 不穩定 選擇排序 簡單選擇排序 穩定 堆排序 不穩定 交換排序 氣泡排序 穩定 快速排序 不穩定 歸併排序。直接插入排序 時間複雜度 o n 2 演算法穩定性 穩定void straightinsertsort int a,int n 氣泡排序 ...
七大排序演算法
首先回顧下各種排序的主要思路 一 氣泡排序 氣泡排序主要思路是 通過交換使相鄰的兩個數變成小數在前大數在後,這樣每次遍歷後,最大的數就 沉 到最後面了。重複n次即可以使陣列有序。氣泡排序改進1 在某次遍歷中如果沒有資料交換,說明整個陣列已經有序。因此通過設定標誌位來記錄此次遍歷有無資料交換就可以判斷...
七大排序演算法
基本思想設要排序的陣列是a 0 a n 1 首先任意選取乙個資料 通常選用陣列的第乙個數 作為關鍵資料,然後將所有比它小的數都放到它前面,所有比它大的數都放到它後面,這個過程稱為一趟快速排序 時空複雜度快速排序的最壞時間為o n 2 平均時間複雜度為o nlgn 在初始陣列近乎有序的狀態下最耗時 快...