zoukankan      html  css  js  c++  java
  • 快速排序(Quick Sort)C语言

    已知数组 src 如下:

    [5, 3, 7, 6, 4, 1, 0, 2, 9, 10, 8]
    

    快速排序1

    在数组 src[low, high] 中,取 src[low] 作为 关键字(key)
    通过 一趟快速排序 找到 key 的位置 keypos
    keypos 将数组划分为两部分: src[low, keypos - 1]src[keypos + 1, high]
    src[low, keypos - 1] 中的元素都 不大于 key
    src[keypos + 1, high] 中的元素都 不小于 key

    一趟快速排序 步骤如下:
    1、定义两个指针 leftright , 初值为 lowhigh
    2、定义关键字 key , 初值为 src[low]
    3、 right 向前搜索,找到第 1 个 小于 key 的元素时,将 src[left]src[right] 互换。
    4、 left 向后搜索,找到第 1 个 大于 key 的元素时,将 src[left]src[right] 互换。
    5、 重复 3,4,直到 left = right 时结束。


    快速排序2

    通过上面的步骤可以发现,我们互换的数据有 1 个是关键字,但是关键字我们已经记录在 key 中,所以不需要将关键字不停的互换。只需要将另一个值移动即可。


    快速排序2(C代码)

    /*********************************************************************
    Function: 快速排序2
    Description:将数组src[low,high]升序排序
    Parameters: src:  待排序数组
    			low:  起始下标
    			high: 结束下标
    Return Value: 排序完成返回0,否则-1
    Author: wowpH
    Date: 2019-11-12 21:57:42
    Reference: 数据结构(C语言版)严蔚敏 吴伟民 清华大学出版社
    From: https://www.cnblogs.com/wowpH/p/11905926.html
    *********************************************************************/
    int quick_sort_two(int src[], int low, int high) {
    	if (low < 0 || low >= high) {
    		return -1;// 下标不合法
    	}
    	int key = src[low];// 将第1个作为关键字
    	int left = low;// 左边界
    	int right = high;// 右边界
    	while (left < right) {// 两端交替向中间扫描
    		// 在右边查找比关键字小的数据
    		while (left < right && src[right] >= key) {
    			--right;
    		}
    		src[left] = src[right];// 将比关键字小的移动到左边
    		// 在左边查找比关键字大的数据
    		while (left < right && src[left] <= key) {
    			++left;
    		}
    		src[right] = src[left];// 将比关键字大的移动到右边
    	}
    	src[left] = key;// 此时left就是一趟快速排序后的关键字所在的位置
    	quick_sort_two(src, low, left - 1);// 对左边的数据递归排序
    	quick_sort_two(src, left + 1, high);// 对右边的数据递归排序
    	return 0;
    }
    

    快速排序视频https://v.qq.com/x/page/w3021nsi4bi.html
    原文链接https://www.cnblogs.com/wowpH/p/11905926.html


    - End - wowpH - pfdvnah -
  • 相关阅读:
    属性MyBank
    C#语法
    NTE与C#
    css3制作网页动画
    网页定位元素
    使用ADO.NET访问数据库
    连接查询和分组查询
    模糊查询和聚合函数
    习题集
    用sql语句操作数据
  • 原文地址:https://www.cnblogs.com/wowpH/p/11905926.html
Copyright © 2011-2022 走看看