C语言快速排序(郝斌老师笔记)
1 利用快速排序实现从小到大排序
定义一个数组Arr 如下:
9 0 8 10 -5 2 13 7
^——————— ^
Low__________High
1、定义一个变量 val 存储 Arr[Low]的值
2、先移动High
High移动规则:
如果Arr[High]>=val,则将High位置前移,即:
--High;
9 0 8 10 -5 2 13 7
^____________ ^
Low__________High
如果Arr[High]<val,则将Arr[High]的值赋值给Arr[Low],即 Arr[Low]=Arr[High];
7 0 8 10 -5 2 13 7
^__________ ___ ^
Low___________High
3、再移动Low
Low移动规则:
如果Arr[Low]>=val,则将位置后移,即:
++Low;
7 0 8 10 -5 2 13 7
+++++^_______ ^
+++++Low_____High
如果Arr[Low]>val,则将Arr[Low]的值赋值给Arr[High],即 Arr[High]=Arr[Low];
7 0 8 10 -5 2 13 10
+++++^_______ ^
+++++Low_____High
4、继续移动High 与 Low
5、只到Low =High时,停止本次排序,并将Arr[Low]或者Arr[High]的值赋值为Val
7 0 8 10 -5 2 13 10
++++++++ ^ ^
++++++++ L H
都指向2
此时将Arr[L]=val 或者Arr[High]=val
7 0 8 10 -5 9 13 10
++++++++ ^ ^
++++++++ L H
此时,就是将9的位置找到
6、一次结束只能将val的正确位置找到
程序代码如下
#include <stdio.h>int FindPos(int *a, int low, int high);
void QuickSort(int * a, int low, int high);int main() {int a[]={1,12,5,98,14,25,36,27,10};for (int i = 0; i < sizeof(a)/sizeof(a[0]); ++i) {printf("a[%d]=%d\n",i,a[i]);}QuickSort(a,0,sizeof(a)/sizeof (a[0]));printf("排序后=======");for (int i = 0; i < sizeof(a)/sizeof(a[0]); ++i) {printf("a[%d]=%d\n",i,a[i]);}}
void QuickSort(int * a, int low, int high)
{int pos;if (low<high){pos =FindPos(a,low,high);QuickSort(a,low,pos-1);QuickSort(a,pos+1,high);}}int FindPos(int *a, int low, int high)
{int val =a[low];while (low<high){while (low<high && a[high]>=val){--high;}a[low]=a[high];while (low<high && a[low]<=val){++low;}a[high]=a[low];}a[low]=val;return low;
}
C语言快速排序(郝斌老师笔记)相关推荐
- 郝斌老师C语言学习笔记(一)
在给变量分配内存时,很可能这段内存存在以前其他程序使用留下的值.当使用VC编译器,若编译器发现没有给变量赋值而使用,就会返回一个以"85"开头的很大的数字(此时该段内存中为一个垃圾 ...
- 郝斌老师-C语言视频教程(全180讲)
<郝斌C语言自学教程>郝斌老师C语言自学专讲180集完整版 目录: 180_C期末考试测试题讲解 下 179_NULL的含义 178_C期末考试测试题讲解上 177_文件 宏 typede ...
- 【郝斌老师数据结构学习笔记 day 3】
目录 前言 一.连续存储数组的算法演示 二.typedef 的用法 总结 前言 数据结构的学习笔记,记录第三天 一.连续存储数组的算法演示 线性结构[把所有的结点用一根直线穿起来] 连续存储[数组] ...
- 【郝斌老师数据结构学习笔记 day 6】
目录 前言 一.算法 二.几种常见存储结构浅析 三.非循环单链表算法演示合集 总结 前言 数据结构的学习笔记,记录第六天 一.算法 算法: 狭义:算法和数据的存储方式密切相关 广义:算法和数据的存储方 ...
- 【郝斌老师数据结构学习笔记 day 7】
目录 前言 一.栈的定义 二.栈的分类 三.栈的一些算法 四.栈的日常应用 总结 前言 数据结构的学习笔记,记录第七天 一.栈的定义 定义:一种可以实现 "先进后出" 的存储结构 ...
- 专业课C语言(郝斌)
文章目录 第一章 C语言概述 第二章 C语言编程预备知识 第三章 基础知识 第四章 流程控制 选择: 第五章 循环 while do...while switch break&continue ...
- MOOC python语言程序设计 嵩天老师 笔记(第六周)
1.S和T是两个集合,哪个选项对S^T的描述是正确的? ...
- C语言郝斌视频学习一 变量为什么要初始化和一个小例子以及大纲笔记
在给变量分配内存时,很可能这段内存存在以前其他程序使用留下的值.当使用VC编译器,若编译器发现没有给变量赋值而使用,就会返回一个以"85"开头的很大的数字(此时该段内存中为一个垃圾 ...
- 赫斌老师数据结构视频查缺补漏笔记
赫斌老师数据结构视频查缺补漏笔记 观看学习赫斌老师数据结构的视频,记录下自己之前学习这块内容时似懂非懂的知识,仅针对自己查缺补漏使用 视频链接:<郝斌老师数据结构自学视频> 1.指针的大小 ...
最新文章
- hdu 3721 树的最小直径
- 【渝粤教育】 国家开放大学2020年春季 3956★汽车故障诊断技术 参考试题
- Axis2 WebService(配置、发布、调用)
- php static_castunsigned int,static_cast揭密
- 任正非:感谢美国,帮我把华为给全世界都宣传了
- 事业单位综合应用能力计算机,最新事业单位统考-综合应用能力C类梳理精华.pdf...
- Java基础学习总结(185)—— Java 在云原生时代的进化
- windows下javadoc生成文档注释的命令
- socket通信原理简介
- 秋招复习-后端(C++)
- ----函数句柄/时间表
- 2021 王道考研 408系列讲解
- Symbian检测是否有存储卡
- 一文读懂 Linux 各发行版之间的联系和区别
- 图文安装VMware Workstation教程
- Contextual Word Embeddings
- 关于选课系统的的界面设计、类图设计、数据库设计。
- [研究生]你该如何“精读”一篇文章?文献管理与文献笔记:以VCNet为例
- iOS -- 第三方登录之微信登录 (Swift代码)
- 正在参加2021年「博客之星」评选,求投票