版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zpalyq110/article/details/79416067
选择排序
void selectionSort(int arr[], int n) {
for (int i = 0; i < n; i++) {
int minIndex = i; // 记录待排数组中最小元素的下标
for (int j = i + 1; j < n; j++) {
if (arr[j] < arr[minIndex])
minIndex = j;
}
swap(arr[minIndex], arr[i]);
}
}
插入排序
void insertionSort(int arr[], int n) {
for (int i = 0; i < n; i++) {
for (int j = i; j > 0 && arr[j] < arr[j - 1]; j--)
swap(arr[j], arr[j - 1]); // 乱序直接交换
}
}
void insertionSortUp(int arr[], int n) { // 改进版,不交换,找到合适位置,将其插入
for (int i = 0; i < n; i ++) {
int e = arr[i];
int j;
for (j = i; j > 0 && e < arr[j - 1]; j --)
arr[j] = arr[j-1];
arr[j] = e;
}
}
冒泡排序
void bubbleSort(int arr[], int n) {
for (int i = 0; i < n; i++) {
for (int j = 0; j < n - i - 1; j++) { // 控制上限,保证最大的最后面的元素不被再次比较,节省时间
if (arr[j] > arr[j + 1])
swap(arr[j], arr[j + 1]);
}
}
}
希尔排序
void shellSort(int arr[], int n) {
int h = 1;
while (h < n / 3) // 创建缩量
h = h * 3 + 1;
while (h >= 1) {
for (int i = h; i < n; i++) { //arr[i], arr[i-h], arr[i-2*h], arr[i-3*h]... 使用插入排序
int j;
int e = arr[i];
for (j = i; j >= h && arr[j - h] > e; j-= h)
arr[j] = arr[j-h];
arr[j] = e;
}
h /= 3;
}
}