排序算法----快速排序----详解&&代码

简介: 排序算法----快速排序----详解&&代码

快速排序:


基本思想:在数列进行快速排序时,选择第一个数为基准值(begin),判断if(left>begin)就swap(left,right),然后right–(向前移一位),if(left<begin)就left++(left向前移一位),当left和right移到一起


就把基准值插入到数列中,循环结束后,left=right,原本数列a[begin+1]~a[end],左边比基准值小,右边比基准值大,

然后把基准值插入到合适序列中,判断基准值比最后left和right共同指的那个数哪个大

如果基准值比它大就放在它后边(交换就行)如果基准值比它小就放在它前边(基准值直接和left-1交换)

代码:

//快速排序
void QuickSort(int data[], int begin, int end)
{
    int temp;
    int left = begin + 1;
    int right = end;
    if (begin < end) //数列中存在数据进入排序
    {
        while (left < right)
        {
            //判断基准值与left的大小
            if (data[begin] < data[left])
            {
                //交换a[left]和a[right]的值,right--
                swap(&data[left], &data[right]);
                right--;
            }
            else
                left++;
        }
        //循环结束后,left=right,原本数列a[begin+1]~a[end],左边比基准值小,右边比基准值打,然后把基准值插入到合适序列中
        //判断基准值比最后left和right共同指的那个数哪个大
        //如果基准值比它大就放在它后边(交换就行)
        //如果基准值比它小就放在它前边(基准值直接和left-1交换)
        if (data[begin] > data[left])
        {
            swap(&data[begin], &data[left]);
        }
        else
        {
            left--;
            swap(&data[begin], &data[left]);
        }
        //此时原本数列a[begin]~a[end]就被分成了两个数列     a[begin]~a[left-1]和a[left+1]~a[end]
        QuickSort(data, begin, left);
        QuickSort(data, left + 1, end);
    }
}
相关文章
|
5天前
|
搜索推荐 算法 Java
Java中的快速排序、归并排序和堆排序是常见的排序算法。
【6月更文挑战第21天】Java中的快速排序、归并排序和堆排序是常见的排序算法。快速排序采用分治,以基准元素划分数组并递归排序;归并排序同样分治,先分割再合并有序子数组;堆排序通过构建堆来排序,保持堆性质并交换堆顶元素。每种算法各有优劣:快排平均高效,最坏O(n²);归并稳定O(n log n)但需额外空间;堆排序O(n log n)且原地排序,但不稳定。
18 3
|
9天前
|
搜索推荐
排序算法---选择排序-----详解&&代码
排序算法---选择排序-----详解&&代码
|
9天前
|
算法 搜索推荐 JavaScript
算法学习:快速排序
算法学习:快速排序
13 1
|
9天前
|
搜索推荐 算法
【排序】数据结构——排序算法概念及代码详解(插入、冒泡、快速、希尔)
【排序】数据结构——排序算法概念及代码详解(插入、冒泡、快速、希尔)
|
15天前
|
算法
数据结构与算法-快速排序
数据结构与算法-快速排序
9 1
|
19天前
|
算法 Java
JavaSE——算法(2/2):查找算法-二分查找(前言、详细图解、代码部分)
JavaSE——算法(2/2):查找算法-二分查找(前言、详细图解、代码部分)
33 2
|
2天前
|
人工智能 算法 Java
java中经典算法代码整理
java中经典算法代码整理
15 0
|
2天前
|
搜索推荐 C语言
【C/排序算法】:快速排序和归并排序的非递归实现
【C/排序算法】:快速排序和归并排序的非递归实现
7 0
|
2天前
|
机器学习/深度学习 搜索推荐 算法
【C/排序算法】:快速排序和冒泡排序
【C/排序算法】:快速排序和冒泡排序
7 0
|
2天前
|
算法 IDE 开发工具
c语言的经典算法代码
c语言进阶11-经典算法代码