1. 冒泡排序
//冒泡排序
void BUBsort(int* arr, int len) {
bool sorted = true; //若某一趟没有发生交换,则表示已有序,提前停止比较
int pass = 0;
while (sorted) {
sorted = false;
for (int i = 0; i < len - 1 - pass; i++) { //第pass趟的结果中后pass个序列有序且最大,不需要再次两两比较
if (arr[i] > arr[i + 1]) {
swap(arr[i], arr[i + 1]);
sorted = true;
}
}
pass++;
//display(arr, len); //打印第pass趟的结果
}
}
2. 快速排序
//快速排序
int partition(int* arr, int len, int low, int high) {
int m = low;
for (int k = low + 1; k <= high; k++) {
if (arr[k] < arr[low]) {
m++;
swap(arr[k], arr[m]);
}
}
swap(arr[m], arr[low]); //使m左边都比a[m]小,m右边都比a[m]大
// display(arr, len); //打印第pass趟的结果
return m;
}
void QUICKsort(int* arr, int len, int low, int high) {
if (low < high) {
int m = partition(arr, len, low, high);
QUICKsort(arr, len, low, m - 1); //D&C
QUICKsort(arr, len, m + 1, high);
}
}