分治法? 递归? 快速排序 C语言
时间:2020-05-27
本文章向大家介绍分治法? 递归? 快速排序 C语言,主要包括分治法? 递归? 快速排序 C语言使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
快速排序,说白了就是给基准数据找其正确索引位置的过程.
快速排序主要 是要找准中心基点,直到最大最小点比较最小点大于最大点结束,左右分别开始比较,第一轮比较完毕后,左边基本都是比中心基点小的,右边都是比中心基点大的,两边同时进行递归继续同样操作;
写法一:
1 static void fast() {
2 printf("\n"); printf("快速排序请输入:"); printf("\n"); 3 static void ks(int arr[], int left, int right); 4 int arr[10]; 5 for (int i = 0; i < 10; i++)scanf("%d", &arr[i]); 6 int len = sizeof(arr) / sizeof(arr[0]);//长度 7 //printf("%d", len); 8 ks(arr, 0, len - 1); 9 //打印 10 for (int i = 0; i < len; i++)printf("%d ", arr[i]); printf("\n"); 11 } 12 13 //快速 排序 14 static void ks(int arr[], int left, int right) { 15 int i = left; //最左边的下标 16 int j = right; //最右边的下标 17 int temp;//互换元素 18 int pivot = arr[(left + right) / 2];//中间起点 基准点 19 while (i<=j) 20 { 21 //从左往右找到大于基准点的元素 22 while (arr[i]<pivot) 23 { 24 i++; 25 } 26 //从右往左找到小于于基准点的元素 27 while (arr[j] > pivot) 28 { 29 j--; 30 } 31 //i<=j 进行互换 32 if (i<=j) 33 { 34 temp = arr[i]; 35 arr[i] = arr[j]; 36 arr[j] = temp; 37 i++; 38 j--; 39 } 40 } 41 //递归操作 42 if (left<j) 43 { 44 ks(arr, left, j); 45 } 46 if (i < right) 47 { 48 ks(arr,i, right); 49 } 50 51 }
写法二: c语言
1 #include<stdio.h> 2 int a[6]; 3 int main() { 4 printf("开始快速排序请输出 5个数: "); 5 //快速排序 6 for (int i = 0; i < 5; i++) { 7 scanf_s("%d", &a[i]); 8 } 9 qsort(0, 4);//4=n-1 n是数组长度 10 //降序排列 11 /* for (int i = 5; i>0; i--) { 12 printf("%5d", a[i-1]); 13 }*/ 14 //升序排列 15 for (int i = 0; i<5; i++) { 16 printf("%5d", a[i]); 17 } 18 19 } 20 21 //快速排序 22 qsort(int l, int r)//应用二分思想 23 { 24 int mid = a[(l + r) / 2];//中间数 25 int i = l, j = r; 26 do { 27 while (a[i] < mid) 28 i++;//查找左半部分比中间数大的数 29 while (a[j] > mid) 30 j--;//查找右半部分比中间数小的数 31 if (i <= j)//如果有一组不满足排序条件(左小右大)的数 32 { 33 swap(i, j);//交换 34 i++; 35 j--; 36 } 37 } while (i <= j); 38 if (l < j) 39 qsort(l, j);//递归搜索左半部分 40 if (i < r) 41 qsort(i, r);//递归搜索右半部分 42 } 43 swap(int i, int j) 44 { 45 int temp = a[i]; 46 a[i] = a[j]; 47 a[j] = temp; 48 }
原文地址:https://www.cnblogs.com/zonzi/p/12975273.html
- shell 学习笔记(19)
- HBase 写优化之 BulkLoad 实现数据快速入库
- 玩转 Linux 之:由 Nginx log rotation 聊聊 mv 的妙用
- 玩转 SHELL 脚本之:linux date 知多少?
- Hive 中的 LEFT SEMI JOIN 与 JOIN ON 的前世今生
- Yaffs_guts
- 4大分析工具的代码表白术,520花式秀恩爱!
- yaffsfs.c
- yaffs_bitmap
- 原创 | 实战:R环境下Echart的8种可视化
- Yarn(MapReduce 2.0)下分布式缓存(DistributedCache)的注意事项
- Yaffs_guts(三)
- 浅谈 python multiprocessing(多进程)下如何共享变量
- 文件地址映射之yaffs_GetTnode
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 故障分析 | 记一次 MySQL 主从双写导致的数据丢失问题
- 集成 SpringBoot 2.3.2 + Shiro 1.5.3 + jwt (无状态)
- 技术译文 | MySQL 8.x DDL 和查询重写插件
- iOS webp图片展示处理
- Android内存优化 | LeakCanary/Profiler & 非静态内部类耗时操作 实战分析
- 使用keycloak实现k8s用户权限的统一管理
- python魔法方法是什么
- 如何同步上游分支代码?
- 在 Pycharm 中安装及使用 Jupyter (图文详解)
- 【经验分享】如何使用keras进行多主机分布式训练
- 分享一种接口的日志格式
- Python 基础(二):基本语句
- javaScript代码飘红报错看不懂?读完这篇文章再试试!
- Synchronized简述
- PythonforResearch | 2_数据处理