📜  排序 c++ (1)

📅  最后修改于: 2023-12-03 15:39:49.738000             🧑  作者: Mango

排序 C++

简介

排序是在计算机科学中经常使用的算法之一,其主要目的是将一系列数据按照一定的规则进行排列。C++中提供了多种排序算法,例如冒泡排序、插入排序、选择排序、快速排序、归并排序等。本文将介绍C++中排序算法的基本实现及其原理。

冒泡排序

冒泡排序是一种简单的排序算法,其原理是对数组进行多次遍历,每次比较相邻的两个元素,如果前面的元素大于后面的元素,则交换它们的位置。经过多次遍历后,最大的元素会被移到数组的末尾,继续对剩下的元素进行排序,直到整个数组有序。

以下是C++中实现冒泡排序的代码片段:

void bubbleSort(int array[], int n) {
    for (int i = 0; i < n-1; ++i) {
        for (int j = 0; j < n-i-1; ++j) {
            if (array[j] > array[j+1]) {
                int temp = array[j];
                array[j] = array[j+1];
                array[j+1] = temp;
            }
        }
    }
}
插入排序

插入排序是一种简单的排序算法,其原理是将一个元素插入到已排序的数组中,使得插入后的数组仍然有序。具体实现方式是从第二个元素开始,将它与前面的所有已排序的元素进行比较,并插入到合适的位置。

以下是C++中实现插入排序的代码片段:

void insertionSort(int array[], int n) {
    for (int i = 1; i < n; ++i) {
        int key = array[i];
        int j = i-1;
        while (j >= 0 && array[j] > key) {
            array[j+1] = array[j];
            --j;
        }
        array[j+1] = key;
    }
}
选择排序

选择排序是一种简单的排序算法,其原理是每次选择未排序元素中最小的元素,将其放置到已排序的末尾。具体实现方式是从第一个元素开始,依次选择未排序的最小元素并将其放置到已排序的末尾。

以下是C++中实现选择排序的代码片段:

void selectionSort(int array[], int n) {
    for (int i = 0; i < n-1; ++i) {
        int minIndex = i;
        for (int j = i+1; j < n; ++j) {
            if (array[j] < array[minIndex]) {
                minIndex = j;
            }
        }
        int temp = array[minIndex];
        array[minIndex] = array[i];
        array[i] = temp;
    }
}
快速排序

快速排序是一种高效的排序算法,其原理是通过分治策略将一个大问题分解为若干个小问题进行求解。具体实现方式是选择一个基准元素,将小于基准元素的元素放置到左边,大于基准元素的元素放置到右边,然后对左右两部分分别进行递归排序。

以下是C++中实现快速排序的代码片段:

void quickSort(int array[], int left, int right) {
    if (left < right) {
        int pivot = partition(array, left, right);
        quickSort(array, left, pivot-1);
        quickSort(array, pivot+1, right);
    }
}

int partition(int array[], int left, int right) {
    int pivot = array[right];
    int i = left-1;
    for (int j = left; j < right; ++j) {
        if (array[j] < pivot) {
            ++i;
            int temp = array[i];
            array[i] = array[j];
            array[j] = temp;
        }
    }
    int temp = array[i+1];
    array[i+1] = array[right];
    array[right] = temp;
    return i+1;
}
归并排序

归并排序是一种高效的排序算法,其原理是通过递归将一个大问题分解为若干个小问题进行求解,然后将小问题的结果合并得到大问题的结果。具体实现方式是将数组划分为左右两部分,递归地对左右两部分进行排序,然后将左右两部分合并得到排序后的数组。

以下是C++中实现归并排序的代码片段:

void mergeSort(int array[], int left, int right) {
    if (left < right) {
        int mid = (left+right)/2;
        mergeSort(array, left, mid);
        mergeSort(array, mid+1, right);
        merge(array, left, mid, right);
    }
}

void merge(int array[], int left, int mid, int right) {
    int n1 = mid-left+1;
    int n2 = right-mid;
    int leftArr[n1], rightArr[n2];
    for (int i = 0; i < n1; ++i) {
        leftArr[i] = array[left+i];
    }
    for (int i = 0; i < n2; ++i) {
        rightArr[i] = array[mid+i+1];
    }
    int i = 0, j = 0, k = left;
    while (i < n1 && j < n2) {
        if (leftArr[i] <= rightArr[j]) {
            array[k++] = leftArr[i++];
        } else {
            array[k++] = rightArr[j++];
        }
    }
    while (i < n1) {
        array[k++] = leftArr[i++];
    }
    while (j < n2) {
        array[k++] = rightArr[j++];
    }
}
总结

本文介绍了C++中常见的排序算法及其实现方式,包括冒泡排序、插入排序、选择排序、快速排序和归并排序。这些排序算法在实际开发中都有广泛的应用,程序员需要熟练掌握其原理及实现方式,以便能够选择合适的算法进行排序。