(1)选择排序
cpp
// 交换
void swap(int arr[], int i, int j) {
int tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
// 选择排序
void selectionSort(int arr[],int len) {
if (len < 2) return;
for (int minIndex, i = 0; i < len - 1; i++) {
minIndex = i;
for (int j = i + 1; j < len; j++) {
if (arr[j] < arr[minIndex]) {
minIndex = j;
}
}
swap(arr, i, minIndex);// 交换
}
printf("选择排序:");
print(arr, len);// 打印
}
(2)冒泡排序
cpp
// 交换
void swap(int arr[], int i, int j) {
int tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
// 冒泡排序
void bubbleSort(int arr[], int len) {
if (len < 2) return;
for (int end = len - 1; end > 0; end--) {
for (int i = 0; i < end; i++) {
if (arr[i] > arr[i + 1]) {
swap(arr, i, i + 1);
}
}
}
printf("冒泡排序:");
print(arr, len);// 打印
}
(3)插入排序
cpp
// 交换
void swap(int arr[], int i, int j) {
int tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
// 插入排序
void insertionSort(int arr[], int len) {
if (len < 2) return;
for (int i = 1; i < len; i++) {
for (int j = i - 1; j >= 0 && arr[j] > arr[j + 1]; j--) {
swap(arr, j, j + 1);
}
}
printf("插入排序:");
print(arr, len);// 打印
}
C++完整代码:
cpp
// 选择、冒泡、插入排序
/*
选择排序一句话:i~n-1范围上,找到最小值并放在i位置,然后 i+1 ~ n-1范围上继续
冒泡排序一句话:0~i范围上,相邻位置较大的数滚下去,最大值最终来到i位置,然后0~i-1范围上继续
插入排序一句话:0~i范围上已经有序,新来的数从右到左滑到不再小的位置插入,然后继续
*/
#include <iostream>
using namespace std;
void print(int arr[],int len) {
for (int i = 0; i < len; i++) {
printf("%d\t", arr[i]);
}
printf("\n");
}
// 交换
void swap(int arr[], int i, int j) {
int tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
// 选择排序
void selectionSort(int arr[],int len) {
if (len < 2) return;
for (int minIndex, i = 0; i < len - 1; i++) {
minIndex = i;
for (int j = i + 1; j < len; j++) {
if (arr[j] < arr[minIndex]) {
minIndex = j;
}
}
swap(arr, i, minIndex);// 交换
}
printf("选择排序:");
print(arr, len);// 打印
}
/*
0~n-1
0~n-2
0~n-3
...
0~end--
*/
// 冒泡排序
void bubbleSort(int arr[], int len) {
if (len < 2) return;
for (int end = len - 1; end > 0; end--) {
for (int i = 0; i < end; i++) {
if (arr[i] > arr[i + 1]) {
swap(arr, i, i + 1);
}
}
}
printf("冒泡排序:");
print(arr, len);// 打印
}
/*
0~0
0~1
0~2
0~3
...
0~n-1
*/
// 插入排序
void insertionSort(int arr[], int len) {
if (len < 2) return;
for (int i = 1; i < len; i++) {
for (int j = i - 1; j >= 0 && arr[j] > arr[j + 1]; j--) {
swap(arr, j, j + 1);
}
}
printf("插入排序:");
print(arr, len);// 打印
}
int main() {
int arr[] = { 1,4,2,6,3,7,0,5};
int len = sizeof(arr) / sizeof(arr[0]);
//selectionSort(arr,len);
//bubbleSort(arr, len);
insertionSort(arr, len);
system("pause");
return 0;
}