C++实现排序算法

来源:互联网 发布:知行天下 百度影音 编辑:程序博客网 时间:2024/06/05 04:44

c++实现六大经典排序算法

数据结构中有六大经典的排序算法,分别是冒泡排序、选择排序、插入排序、归并排序、快速排序和堆排序,以下是用c++实现的六大经典算法的代码:

**1.冒泡排序:**#include <iostream>#include <cmath>#include <string>using namespace std;//一次冒泡排序void bubble(int arr[],int size) {    for (int i = 1; i < size - 1; i++) {        if (arr[i - 1] > arr[i]) {            swap(arr[i - 1], arr[i]);        }    }}//多次冒泡排序void bubbleSort(int arr[], int size) {    for (int i = 0; i < size - 1; i++) {        bubble(arr, size);    }}//测试部分void main() {    int arr[] = { 3,2,1,4,5 };    bubbleSort(arr, 5);    for (auto c : arr) {        cout << c<<" ";    }    cout << endl;}**2.选择排序:**#include <iostream>#include <cmath>#include <string>#include <algorithm>using namespace std;//此函数用于找到一次循环的最大值void select(int arr[], int size) {    int max = arr[0];    int pos = 0;    for (int i = 0; i < size; i++) {        if (arr[i] > max) {            max = arr[i];            pos = i;        }    }    swap(arr[pos], arr[size - 1]);}//此函数用于剩余size-1个数进行求最大数并把最大数放在第size-1个位置void selectSort(int arr[], int size) {    for (int i = size; i >= 1; i--) {        select(arr, i);    }}void main() {    int arr[] = { 3,2,5,4,1 };    selectSort(arr, 5);    for (auto c : arr) {        cout << c << " ";    }    cout << endl;}**3.插入排序:**#include <iostream>#include <cmath>#include<algorithm>using namespace std;void insert(int arr[], int i) {    int key = arr[i];    while (key < arr[i - 1]) {        arr[i] = arr[i - 1];        i--;        if (i == 0) {            break;        }    }    arr[i] = key;   }void insertSort(int arr[], int len) {    for (int i = 1; i < len; i++) {        insert(arr, i);    }}void main() {    int arr[] = { 2,1,9,45,6,1,7,0,12,89 };    insertSort(arr, 10);    for (auto c : arr) {        cout << c << " ";    }}**4.归并排序**#include <iostream>#include <cmath>#include <string>using namespace std;void merge(int arr[], int L, int M, int R) {    int Left[4];    int Right[4];    for (int i = L; i < M - L; i++) {        Left[i - L] = arr[i];    }    for (int i = M; i <= R; i++) {        Right[i-M] = arr[i];    }    int i = 0, j = 0, k = 0;    while (i < 4 && j < 4) {        if (Left[i] < Right[j]) {            arr[k] = Left[i];            k++;            i++;        }        else{            arr[k] = Right[j];            k++;            j++;        }    }    while (i < 4) {        arr[k] = Left[i];        k++;        i++;    }    while (j < 4) {        arr[k] = Right[j];        k++;        j++;    }}void main() {    int arr[] = { 2,4,6,8,3,5,7,9 };    merge(arr, 0, 4, 7);    for (auto c : arr) {        cout << c << " ";    }    cout << endl;}**5.快速排序**#include <iostream>#include <cmath>#include <string>#include <algorithm>using namespace std;void quick(int arr[], int L,int R) {    int pivot = arr[(L + R) / 2];    int i = L;     int j = R;    while (i <= j) {        while (arr[i] < pivot) {            i++;        }        while (arr[j] > pivot) {            j--;        }        if (i <= j) {            swap(arr[i], arr[j]);            i++;            j--;        }    }    if (L < j) {        quick(arr, L, j);    }    if (i < R) {        quick(arr, i, R);    }}void main() {    int arr[] = { 9,8,6,4,5 };    quick(arr, 0, 4);    for(auto c:arr)    {        cout << c << " ";    }    cout << endl;}**6.堆排序**#include <iostream>#include <cmath>#include<algorithm>using namespace std;//父节点大于左右子节点void heap(int arr[], int index, int len) {    int max = index;    int left = 2 * index + 1;    int right = 2 * index + 2;    if (left < len && arr[max] < arr[left]) {        max = left;    }    if (right <len && arr[max] < arr[right]) {        max = right;    }    if (index != max) {        swap(arr[index], arr[max]);    }   }//从最后一个节点开始建大顶堆,从下往上建堆void heapList(int arr[], int len) {    for (int i = len - 1; i >= 0; i--) {        heap(arr, i, len);    }}//将根节点与最后一个节点进行交换void heapSort(int arr[], int len) {    for (int i = len - 1; i >= 0; i--) {        heapList(arr, i+1);        swap(arr[0], arr[i]);    }}void main() {    int arr[] = { 2,1,9,45,6,3,7,0,12,89 };    heapSort(arr, 10);    for (auto c : arr) {        cout << c << " ";    }}
原创粉丝点击