各种排序c++算法,可直接运行

#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;
	

}

  • 8
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值