美文网首页
排序算法总结 - C++

排序算法总结 - C++

作者: CL_玲儿 | 来源:发表于2018-08-28 15:11 被阅读0次

冒泡排序: 主要原理是每次两两比较,大的往下沉。代码实现如下:

void BubbleSort(int array[], int len) {
    bool isSwap;
    for (int i = 0; i < len; i++) {
        isSwap = false;
        for (int j = 0; j < len - 1 - i; j++) {
            if (array[j] > array[j + 1]) {
                int temp = array[j];
                array[j] = array[j + 1];
                array[j + 1] = temp;
                isSwap = true;
            }
        }
        if (!isSwap) {
            break;
        }
    }
}

选择排序:每一次从待排序的数据元素中选出最小的一个元素,存放在序列的起始位置,直到全部待排序的元素排完。代码实现如下:

void SelectionSort(int array[], int len) {
    int index;
    for (int i = 0; i < len - 1; i++) {
        index = i;
        for (int j = i + 1; j < len; j++) {
            if (array[index] > array[j]) {
                index = j;
            }
        }
        if (index != i) {
            int temp = array[i];
            array[i] = array[index];
            array[index] = temp;
        }
    }
}

插入排序:每步将一个待排序的记录,按其关键码的大小插入前面已经排序的队列适当位置上,直到全部插入完为止。代码实现如下:

void InsertSort(int array[], int len) {
    for (int i = 1; i < len; i++) {
        int temp = array[i];
        int j = i;
        while (array[j - 1] > temp && j > 0) {
            array[j] = array[j - 1];
            j--;
        }
        array[j] = temp;
    }
}

桶排序:简单的桶排序,适用于正整数且上界不大的数组排序。此处的映射直接是线性的。代码实现如下:

void BucketSort(int array[], int len) {
    int bucket[MAX];
    memset(bucket, 0, sizeof(bucket));

    for (int i = 0; i < len; i++) {
        bucket[array[i]]++;
    }

    int k = 0;
    for (int j = 0; j < MAX; j++) {
        while (bucket[j]--) {
            array[k++] = j;
        }
    }
}

快速排序:快速排序是找出一个元素(理论上可以随便找一个,一般都会选择第一个)作为基准(pivot),然后对数组进行分区操作,使基准左边的值都不大于基准值,其基准右边的元素值都不小于基准值,如此作为基准的元素调整到排序后的正确位置,递归快速排序,将其他n-1个元素也调整到排序后的正确位置。最后每个元素都是在排序后的正确位置,排序完成。所以快速排序算法的核心算法是分区操作,即如何调整基准的位置以及调整返回基准的最终位置以便分治递归。例如:
2 4 9 3 6 7 1 5 首先用 2 当作基准, 使用 i j 两个指针分别从两边进行扫描, 把比 2 小的元素和比 2 大的元素分开。 首先比较 2 和 5, 5 比 2 大, j 左移
2 4 9 3 6 7 1 5 比较 2 和 1, 1 小于 2, 所以把 1 放在 2 的位置
1 4 9 3 6 7 1 5 比较 2 和 4, 4 大于 2, 因此将 4 移动到后面
1 4 9 3 6 7 4 5 比较 2 和 7, 2 和 6, 2 和 3, 2 和 9, 全部大于 2, 满足件,因此不变
经过第一轮的快速排序, 元素变为下面的样子
[1] 2 [9 3 6 7 4 5]
代码实现如下:

void QuickSort(int array[], int left, int right) {
    if (left < right) {
        int key = array[left];
        int low = left;
        int high = right;
        while (low < high) {
            while (low < high && array[high] >= key) {
                high--;
            }
            array[low] = array[high];
            while (low < high && array[low] <= key) {
                low++;
            }
            array[high] = array[low];
        }

        array[low] = key;
        QuickSort(array, left, low - 1);
        QuickSort(array, low + 1, right);
    }
}

相关文章

  • C++

    排序算法总结 对十二种排序算法进行总结C++ 类内存分布 这里不妨说下 C++ 内存分布结构,我们来看看编译器是怎...

  • 七大排序算法之冒泡排序

    七大排序算法之冒泡排序 @(算法笔记)[排序算法, 冒泡排序, C++实现] 冒泡排序介绍 冒泡排序是七大排序算法...

  • C++ 排序算法

    C++排序算法 待续

  • 七大排序算法之快速排序

    七大排序算法之快速排序 @(算法笔记)[排序算法, 快速排序, C++实现] [TOC] 快速排序的介绍: 快速排...

  • 简单排序算法

    刚学c++,利用两种间的排序算法来练练手0.01.冒泡法排序 2.快速排序 总结以下两种算法的思路不同点:

  • iOS算法总结-堆排序

    iOS算法总结-堆排序 iOS算法总结-堆排序

  • iOS算法总结-冒泡排序

    iOS算法总结-冒泡排序 iOS算法总结-冒泡排序

  • 排序算法详细代码实现

    算法分类 算法时间复杂度 选择排序 插入排序 C++实现 Python实现 冒泡排序 Python实现 归并排序 ...

  • 排序算法

    十大经典排序算法Lua版八大排序算法C++/C#

  • 排序算法总结 - C++

    冒泡排序: 主要原理是每次两两比较,大的往下沉。代码实现如下: 选择排序:每一次从待排序的数据元素中选出最小的一个...

网友评论

      本文标题:排序算法总结 - C++

      本文链接:https://www.haomeiwen.com/subject/nipfwftx.html