#include <iostream>
#include <random>
#include <ctime>
using namespace std;
void merge(int arr[], int l, int m, int r) {
int i, j, k;
int n1 = m - l + 1;
int n2 = r - m;
int L[n1], R[n2];
for (i = 0; i < n1; i++)
L[i] = arr[l + i];
for (j = 0; j < n2; j++)
R[j] = arr[m + 1 + j];
i = 0;
j = 0;
k = l;
while (i < n1 && j < n2) {
if (L[i] <= R[j]) {
arr[k] = L[i];
i++;
} else {
arr[k] = R[j];
j++;
}
k++;
}
while (i < n1) {
arr[k] = L[i];
i++;
k++;
}
while (j < n2) {
arr[k] = R[j];
j++;
k++;
}
}
//冒泡排序
void bubbleSort(int arr[], int n) {
for (int i = 0; i < n-1; i++) {
for (int j = 0; j < n-i-1; j++) {
if (arr[j] > arr[j+1]) {
// 交换arr[j]和arr[j+1]
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
}
//选择排序
void selectionSort(int arr[], int n) {
for (int i = 0; i < n-1; i++) {
int minIndex = i;
for (int j = i+1; j < n; j++) {
if (arr[j] < arr[minIndex]) {
minIndex = j;
}
}
// 交换arr[i]和arr[minIndex]
int temp = arr[i];
arr[i] = arr[minIndex];
arr[minIndex] = temp;
}
}
//插入排序
void insertionSort(int arr[], int n) {
for (int i = 1; i < n; i++) {
int key = arr[i];
int j = i - 1;
while (j >= 0 && arr[j] > key) {
arr[j+1] = arr[j];
j--;
}
arr[j+1] = key;
}
}
//快速排序
void quickSort(int arr[], int low, int high) {
if (low < high) {
int pivot = arr[high];
int i = low - 1;
for (int j = low; j < high; j++) {
if (arr[j] < pivot) {
i++;
// 交换arr[i]和arr[j]
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
// 交换arr[i+1]和arr[high]
int temp = arr[i+1];
arr[i+1] = arr[high];
arr[high] = temp;
int pi = i + 1;
quickSort(arr, low, pi - 1);
quickSort(arr, pi + 1, high);
}
}
//归并排序
void merge1(int arr[], int l, int m, int r) {
int n1 = m - l + 1;
int n2 = r - m;
int L[n1], R[n2];
for (int i = 0; i < n1; i++) {
L[i] = arr[l + i];
}
for (int j = 0; j < n2; j++) {
R[j] = arr[m + 1 + j];
}
int i = 0, j = 0, k = l;
while (i < n1 && j < n2) {
if (L[i] <= R[j]) {
arr[k] = L[i];
i++;
} else {
arr[k] = R[j];
j++;
}
k++;
}
while (i < n1) {
arr[k] = L[i];
i++;
k++;
}
while (j < n2) {
arr[k] = R[j];
j++;
k++;
}
}
void mergeSort(int arr[], int l, int r) {
if (l < r) {
int m = l + (r - l) / 2;
mergeSort(arr, l, m);
mergeSort(arr, m + 1, r);
merge1(arr, l, m, r);
}
}
int main() {
//系统生成随机数据数组
int n=10;
// cout << "请输入数组的大小:";
// cin >> n;
// n=10;
int data[n],datas[n];
srand(time(0)); // 使用当前时间作为随机数种子,保证每次运行时生成的随机数不同。
for (int i = 0; i < n; i++) { // 根据输入的数组大小生成随机数并赋值给数组。
data[i] = rand() % 100; // 生成 0 到 99 之间的随机数并赋值给数组。
datas[i] = data[i];
}
for (int i = 0; i < n; i++) {
cout << "第 " << i + 1 << " 个元素:" << data[i] << endl;
}
int size = n; // 数组大小
// 冒泡排序
bubbleSort(data, size);
cout << "Bubble Sort: "<<endl;
for (int i = 0; i < size; i++) {
cout << data[i] << " ";
}
cout << endl;
// 把data数组复位
for (int i = 0; i < n; i++) {
data[i] = datas[i];
}
// 选择
selectionSort(data, size);
cout << "Selection Sort: "<<endl;
for (int i = 0; i < size; i++) {
cout << data[i] << " ";
}
cout << endl;
// 把data数组复位
for (int i = 0; i < n; i++) {
data[i] = datas[i];
}
//插入排序
insertionSort(data, size);
cout << "Insertion Sort: "<<endl;
for (int i = 0; i < size; i++) {
cout << data[i] << " ";
}
cout << endl;
// 把data数组复位
for (int i = 0; i < n; i++) {
data[i] = datas[i];
}
// 快排
quickSort(data, 0, size - 1);
cout << "Quick Sort: "<<endl;
for (int i = 0; i < size; i++) {
cout << data[i] << " ";
}
cout << endl;
// 把data数组复位
for (int i = 0; i < n; i++) {
data[i] = datas[i];
}
// 排前输出数组
cout << "归并排前输出数组 "<<endl;
for (int i = 0; i < size; i++) {
cout << data[i] << " ";
}
cout << endl;
// 归并排
mergeSort(data, 0, size - 1);
cout << "Merge Sort: "<<endl;
for (int i = 0; i < size; i++) {
cout << data[i] << " ";
}
cout << endl;
}
各种排序c++算法,可直接运行
最新推荐文章于 2024-06-14 09:44:07 发布