c排序
#pragma once//如果写头文件 放置头文件重复包含
#include<stdio.h> //定义类型 结构体类型定义 //宏定义 #define
//函数申明 void printArr(int arr[], int len);//参数数组名和数组大小 打印一个数组里面所有内容
void bulletSort(int arr[], int len);//冒泡排序
void selectSort(int arr[], int len);//选择排序
void insertSort(int arr[], int len);//插入排序
void quickSort(int arr[], int left, int right);//快速排序
sort.c
#include"sort.h"
void printArr(int arr[], int len)
{
for (int i = ; i < len; ++i)
{
printf("%d\t", arr[i]);
}
printf("\n");
}
void bulletSort(int arr[], int len)
{
int temp;
for (int i = ; i < len - ; ++i)//循环操作的次数
{
//从前往后进行比较 顺序不合适交换位置
for (int j = ; j < len--i; j++)
{ //这里-i的目的是因为 比较一轮之后有一数字沉底 这个数字不在参与后续的比较
if (arr[j]>arr[j + ])//前面比后面大 最后从小到大的顺序
{
//交换两个元素的位置
temp = arr[j];
arr[j] = arr[j + ];
arr[j + ] = temp;
}
}
}
}
void selectSort(int arr[], int len)//选择排序
{
//如果10个数据 选择9次
int k,temp;
for (int i = ; i < len - ; ++i)
{
//从生效的元素中选择一个最小的和arr[i]进行交换
k = i;
for (int j = i + ; j < len; j++)
{
if (arr[j] < arr[k])
{
k = j;//k保存最小元素的下标
}
}
//用最小元素 arr[k] 和arr[i]交换
temp = arr[k];
arr[k] = arr[i];
arr[i] = temp; }
}
void insertSort(int arr[], int len)
{
int temp,j;
for (int i = ; i < len; i++)//第一个元素 视为有序 后面的元素一个个插入进来
{
//一步一步插入的步骤
temp = arr[i];
j = i - ;
while (j >= && arr[j]>temp)
{
arr[j + ] = arr[j];//把这个数据往后拖
j--;
}
arr[j + ] = temp;
} }
void quickSort(int arr[], int left, int right)//排序[left,right]这个区间的元素
{
if (left >= right) return;//只有一个元素不排
int temp, i = left, j = right;
while (i<j)
{
while (i<j&&arr[j] >= arr[left]) --j;
while (i<j&&arr[i]<arr[left]) ++i;
if (i<j)
{
//交换arr[i] arr[j];
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
//交换arr[i]和arr[left]
temp = arr[i];
arr[i] = arr[left];
arr[left] = temp; quickSort(arr, left, i - );//排左边
quickSort(arr, i + , right);//排右边
}
排序.c
/*
复习 预处理命令--------------------------
1.宏定义
#define PI 3.141592654 文本替换 替换常用内容
#define ADD(a,b) ((a)+(b)) 带参数的文本替换 防止替换之后优先级出现问题
2.头文件包含
#include<头文件> 如果系统自带 那么用<>
#include"头文件" 如果自己写 那么用" " 你需要用到什么样的函数 需要#include 去包含它的头文件 目的 函数--->拆成多个文件 拆开之后如何使用
3.条件编译
通过宏去判断使用的字符集
通过宏 判断用的什么环境....
#ifndef 宏 #endif
#if 0
#endif
新内容 排序算法-------------------------- 算法 一组乱序数据 变成有--->排序 一类问题 成绩从高到低排序
百度 根据热度进行排序(广告投放) 一类问题 可能不止有一种算法
评判算法的好坏 时间复杂度和空间复杂度 需要排序100个数据 排序10个数据 排序n个数据 --->时间和n的关系 空间和n的关系 算法和编程语言 算法-->方法 可以用c原因写代码 也可以是其他语言
算法和数据结构 排序 数据进行排序 数据的存放方式 影响代码的实现和效率
int a,b,c;
int arr[3]; 数据结构 组织和存放数据的方式 作用 管理数据 --->影响操作方式
算法 处理数据 算法+数据结构 同一种算法 最后写出的代码可能不一样
1.冒泡 从头到尾比较练歌相邻的元素 如果顺序和要排序的方式不一样 就交换
两个元素 比较一轮之后会让最大的数字沉底
2.选择 每次从剩下的元素中找到最小的 和前面的元素进行交换
3.插入
4.快速 从小到大的方式进行排序
*/ #include<stdio.h>
#include"sort.h"
int main()
{
int arr[] = { , , , , , , , , , };
//bulletSort(arr, 10);//冒泡排序
//selectSort(arr, 10);//选择排序
//insertSort(arr, 10);//插入排序
quickSort(arr,, );//快速排序
printArr(arr, );//输出
getchar();
return ;
}
c排序的更多相关文章
- javascript中的Array对象 —— 数组的合并、转换、迭代、排序、堆栈
Array 是javascript中经常用到的数据类型.javascript 的数组其他语言中数组的最大的区别是其每个数组项都可以保存任何类型的数据.本文主要讨论javascript中数组的声明.转换 ...
- iOS可视化动态绘制八种排序过程
前面几篇博客都是关于排序的,在之前陆陆续续发布的博客中,我们先后介绍了冒泡排序.选择排序.插入排序.希尔排序.堆排序.归并排序以及快速排序.俗话说的好,做事儿要善始善终,本篇博客就算是对之前那几篇博客 ...
- JavaScript实现常用的排序算法
▓▓▓▓▓▓ 大致介绍 由于最近要考试复习,所以学习js的时间少了 -_-||,考试完还会继续的努力学习,这次用原生的JavaScript实现以前学习的常用的排序算法,有冒泡排序.快速排序.直接插入排 ...
- [C#][算法] 用菜鸟的思维学习算法 -- 马桶排序、冒泡排序和快速排序
用菜鸟的思维学习算法 -- 马桶排序.冒泡排序和快速排序 [博主]反骨仔 [来源]http://www.cnblogs.com/liqingwen/p/4994261.html 目录 马桶排序(令人 ...
- 算法与数据结构(十三) 冒泡排序、插入排序、希尔排序、选择排序(Swift3.0版)
本篇博客中的代码实现依然采用Swift3.0来实现.在前几篇博客连续的介绍了关于查找的相关内容, 大约包括线性数据结构的顺序查找.折半查找.插值查找.Fibonacci查找,还包括数结构的二叉排序树以 ...
- 算法与数据结构(七) AOV网的拓扑排序
今天博客的内容依然与图有关,今天博客的主题是关于拓扑排序的.拓扑排序是基于AOV网的,关于AOV网的概念,我想引用下方这句话来介绍: AOV网:在现代化管理中,人们常用有向图来描述和分析一项工程的计划 ...
- 使用po模式读取豆瓣读书最受关注的书籍,取出标题、评分、评论、题材 按评分从小到大排序并输出到txt文件中
#coding=utf-8from time import sleepimport unittestfrom selenium import webdriverfrom selenium.webdri ...
- javascript排序
利用array中的sort()排序 w3cfunction sortNumber(a,b) { return a - b } var arr = new Array(6) arr[0] = " ...
- iOS自定义model排序
在开发过程中,可能需要按照model的某种属性排序. 1.自定义model @interface Person : NSObject @property (nonatomic,copy) NSStri ...
- Lucene4.4.0 开发之排序
排序是对于全文检索来言是一个必不可少的功能,在实际运用中,排序功能能在某些时候给我们带来很大的方便,比如在淘宝,京东等一些电商网站我们可能通过排序来快速找到价格最便宜的商品,或者通过排序来找到评论数最 ...
随机推荐
- String 的成员函数
本篇是把一些string的成员函数的用法记录下来 size()函数和lenth()函数 s.size()或者s.lenth() 它们都会返回长度,是总长度而不是下标长度 find函数 s.find(s ...
- 判断list集合不为空
在java开发中新手容易将判断一个list集合是否为空,只以If(list!=null)去判断,且容易和isEmpty()混淆,但是,list集合为空还是为null,是有区别的. 先看一下下面的例子, ...
- springboot4自动配置的原理(浅层)
自动配置的原理(浅层) @Configuration //这是一个配置类 @EnableConfigurationProperties(HttpProperties.class)//启用Configu ...
- C#3.0新增功能10 表达式树 01 简介
连载目录 [已更新最新开发文章,点击查看详细] 如果你使用过 LINQ,则会有丰富库(其中 Func 类型是 API 集的一部分)的经验. (如果尚不熟悉 LINQ,建议阅读 LINQ 教程,以 ...
- [leetcode] 19. Remove Nth Node From End of List (Medium)
原题链接 删除单向链表的倒数第n个结点. 思路: 用两个索引一前一后,同时遍历,当后一个索引值为null时,此时前一个索引表示的节点即为要删除的节点. Runtime: 13 ms, faster t ...
- python字符编码-文件操作
字符编码 字符编码历史及发展 为什么有字符编码 ''' 原因:人们想要将数据存入计算机 计算机的能存储的信息都是二进制的数据 内存是基于电工作的,而电信号只有高低频两种,就用01来表示高低电频,所以计 ...
- Java秒杀系统实战系列~商品秒杀代码实战
摘要: 本篇博文是“Java秒杀系统实战系列文章”的第六篇,本篇博文我们将进入整个秒杀系统核心功能模块的代码开发,即“商品秒杀”功能模块的代码实战. 内容: “商品秒杀”功能模块是建立在“商品详情”功 ...
- C++实现反射
之前碰到过一个问题,C++中如何通过一个字符串生成一个类. C++是不支持通过类名称字符串”ClassXX”来生成对象的,也就是说我们可以使用 new ClassXX 来生成对象,但是不能通过 new ...
- Python之assert断言语句
关键字assert构成断言语句,主要是可以在我们书写一个新的程序时,可以使用它帮我们锁定bug范围. 表达式: assert 表达式 ‘窗口提示的信息’ 括号中的项目为选填项目,选填项目将会在表达式的 ...
- LeetCode :2.两数相加 解题报告及算法优化思路
题目连接:2.两数相加 题意 题目难度标为 中等, 因为题意上有一部分理解难度,以及需要数据结构的链表基础. 还不知道到链表的童鞋可以粗略的看下百度百科或者是翻出数据结构的书看一看,通俗一点的语言来解 ...