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 -
  • 相关阅读:
    MySQL-基本sql命令
    Java for LeetCode 203 Remove Linked List Elements
    Java for LeetCode 202 Happy Number
    Java for LeetCode 201 Bitwise AND of Numbers Range
    Java for LeetCode 200 Number of Islands
    Java for LeetCode 199 Binary Tree Right Side View
    Java for LeetCode 198 House Robber
    Java for LeetCode 191 Number of 1 Bits
    Java for LeetCode 190 Reverse Bits
    Java for LeetCode 189 Rotate Array
  • 原文地址:https://www.cnblogs.com/wowpH/p/11905926.html
Copyright © 2011-2022 走看看