排序算法之快速排序

简介: 快速排序     快速排序是在待排序序列中选定一个数(一般以选择第一个数),然后将待排序序列这样处理:以选定的这个数为基准,这个数的左边存放比它小的数,右边存放比它大的数。处理完之后去右边的区间选定一个数继续进行这样的过程,去右边的区间选定一个数继续进行这样的过程。      例如序列{50, 10, 90, 30, 70, 40, 80, 60, 20}。第一趟时,选

快速排序

     快速排序是在待排序序列中选定一个数(一般以选择第一个数),然后将待排序序列这样处理:以选定的这个数为基准,这个数的左边存放比它小的数,右边存放比它大的数。处理完之后去右边的区间选定一个数继续进行这样的过程,去右边的区间选定一个数继续进行这样的过程。
     例如序列{50, 10, 90, 30, 70, 40, 80, 60, 20}。第一趟时,选择50为基准,做一个循环将比50小的数移动到左边,比50大的数移动到右边。该序列变为{20, 10, 40, 50, 70, 80, 60, 90}。然后在50的左边的区间和右边的区间继续进行这样的操作,得到序列{10, 20, 40, 50, 60, 70, 80, 90},接着去然后20的左边和右边,70的左边和右边进行这样的操作。
     有上面的介绍可以看出,快速排序最主要的过程就是要将比基准元素小的数移动到基准元素的左边,将比基准元素大的数移动到基准元素的右边。这个过程的实现是通过两个标志指针(不是实际意义上的指针,有些像控制循环变量i),一个指针i从下标0开始向后,一个指针j从size-1开始向前,j先开始移动去找比基准元素小的值,找到的话将这个值赋值给i指向的空间,接着i开始移动,去找比基准元素大的数,找到的话将其赋值给j指向的空间,然后j移动…..一直到i和j相遇为止。

typedef int datatype;
int QuickSort(datatype *array, int low, int high)
{
    int i = low;
    int j = high;
    int temp;

    if(array == NULL) {
        return -1;
    }
//递归的临界条件
    if(low >= high) {
        return -1;
    }
//选取区间第一个数为基准元素
    temp = array[low];

    while(i != j) {
    //j向前移动找比基准元素小的数
        for( ; j > i && array[j] > temp; j--) 
            ;

    //将找到的数赋值给i指向的空间
        if(j > i) {
            array[i] = array[j];
            i++;
        }

    //i向后移动找比基准元素大的数
        for( ; i < j && temp > array[i]; i++) 
            ;

    //将找到的数赋值给j指向的空间        
        if(i < j) {
            array[j] = array[i];
            j--;
        }
    }

//将基准元素放在中间的位置(即i或j指向的位置)
    array[i] = temp;
//比基准元素小的左区间进行快速排序
    QuickSort(array, low, i-1);
//比基准元素大的右区间进行快速排序
    QuickSort(array, i+1, high);

    return 0;
}
目录
相关文章
|
17天前
|
算法 数据处理 C语言
【数据结构与算法】快速排序(详解:快排的Hoare原版,挖坑法和双指针法|避免快排最坏时间复杂度的两种解决方案|小区间优化|非递归的快排)
【数据结构与算法】快速排序(详解:快排的Hoare原版,挖坑法和双指针法|避免快排最坏时间复杂度的两种解决方案|小区间优化|非递归的快排)
|
23天前
|
搜索推荐 Java
Java基础(快速排序算法)
Java基础(快速排序算法)
24 4
|
26天前
|
搜索推荐 算法 编译器
【数据结构】八大排序之快速排序算法
【数据结构】八大排序之快速排序算法
35 4
|
1月前
|
搜索推荐
数据结构——排序算法之快速排序
数据结构——排序算法之快速排序
34 0
|
1月前
|
算法 搜索推荐 Java
数据结构与算法(Java篇)笔记--快速排序
数据结构与算法(Java篇)笔记--快速排序
|
1月前
|
搜索推荐 JavaScript
NodeJS实现快速排序算法
NodeJS实现快速排序算法
14 0
|
1月前
|
搜索推荐
排序算法-快速排序
排序算法-快速排序
17 0
|
1月前
|
搜索推荐 Python
python实现快速排序算法。
【2月更文挑战第9天】【2月更文挑战第23篇】python实现快速排序算法。
|
2月前
|
搜索推荐 算法 Java
【数据结构排序算法篇】----快速排序【实战演练】
【数据结构排序算法篇】----快速排序【实战演练】
28 2
|
2月前
|
存储 搜索推荐
【非递归版】快速排序算法(4)
【非递归版】快速排序算法(4)
18 0