算法学习-快速排序

假设要排序的数组是A[0]……A[N-1]。首先任意选取一个数据(通常选用数组的第一个数)作为关键数据,然后将所有比它小的数都放到它前面,所有比它大的数都放到它后面,这个过程称为一趟快速排序。这样数组就被关键数据分成了两部分,用相同的办法将这两部分继续进行快速排序,直到分隔的数据为单个为止。

值得注意的是,快速排序不是一种稳定的排序算法,也就是说,多个相同的值的相对位置也许会在算法结束时产生变动。

代码
void quick_sort(int a[], int left, int right)
{
    if (left >= right) {
        return;
    }
    int i = left;
    int j = right;
    int t = a[i];
    while (i < j) {

        // 从右向左找第一个小于x的数
        while (i < j && a[j] >= x) {
            j--;
        }
        if (i < j) {
            a[i] = a[j];
            i++;
        }

        // 从左向右找第一个大于等于x的数
        while (i < j && a[i] < x) {
            i++;
        }
        if (i < j) {
            a[j] = a[i];
            j--;
        }
    }
    a[i] = t;

    // 递归调用
    quick_sort(s, left, i - 1);  
    quick_sort(s, i + 1, right);
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 前言 提前说明一下吧。这篇文章只是记录自己学习《算法》——快速排序的过程,只会记录自己对算法实现过程的基本理解并不...
    恶趣男阅读 278评论 0 3
  • 版本记录 前言 将数据结构和算法比作计算机的基石毫不为过,追求程序的高效是每一个软件工程师的梦想。下面就是我对算法...
    刀客传奇阅读 5,369评论 4 72
  • 背景介绍:又称划分交换排序(partition-exchange sort),一种排序算法,最早由东尼·霍尔提出。...
    DreamFish阅读 258评论 0 1
  • 概述 排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部...
    蚁前阅读 5,292评论 0 52
  • 概述:排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部...
    每天刷两次牙阅读 3,809评论 0 15

友情链接更多精彩内容