选择排序
void select_sort(int arr[], int length) {
for (int i = 0; i < length - 1; i++) {
int min_in = i;
for (int j = i + 1; j < length; j++) {
if (arr[j] < arr[min_in]) {
min_in = j;
}
}
swap(arr[i], arr[min_in]);
}
}
插入排序
void insert_sort(int arr[], int length) {
for (int i = 1; i < length; i++) {
int temp = arr[i];
int j = i;
while (arr[j - 1] > temp && j > 0) {
arr[j] = arr[j - 1];
j--;
}
arr[j] = temp;
}
}
希尔排序
void shell_sort(int arr[], int length) {
for (int d = length / 2; d > 0; d /= 2) {
for (int i = d; i < length; i++) {
int temp = arr[i];
int j = i - d;
while (j >= 0 && arr[j] > temp) {
arr[j + d] = arr[j];
j -= d;
}
arr[j + d] = temp;
}
}
}
冒泡排序
void bubbling_sort(int arr[], int length) {
int exchange = length;
while (exchange != 0) {
int END = exchange;
exchange = 0;
for (int i = 1; i < END; i++) {
if (arr[i] < arr[i - 1]) {
swap(arr[i], arr[i - 1]);
exchange = i;
}
}
}
}
快速排序
int partition(int arr[], int first, int last) {
int i = first, j = last;
while (i < j) {
while (i < j && arr[i] < arr[j]) j--;
if (i < j) {
swap(arr[i], arr[j]);
i++;
}
while (i < j && arr[i] < arr[j]) i++;
if (i < j) {
swap(arr[i], arr[j]);
j--;
}
}
return i;
}
void fast_sort(int arr[], int length, int first, int last) {
if (first >= last) return ;
int pivot = partition(arr, first, last);
fast_sort(arr, length, pivot + 1, last);
fast_sort(arr, length, first, pivot - 1);
}