c排序

 1 #pragma once//如果写头文件   放置头文件重复包含
 2 #include<stdio.h>
 3 
 4 //定义类型  结构体类型定义
 5 
 6 //宏定义  #define
 7 //函数申明
 8 
 9 void printArr(int arr[], int len);//参数数组名和数组大小 打印一个数组里面所有内容
10 void bulletSort(int arr[], int len);//冒泡排序
11 void selectSort(int arr[], int len);//选择排序
12 void insertSort(int arr[], int len);//插入排序
13 void quickSort(int arr[], int left, int right);//快速排序

sort.c

 1 #include"sort.h"
 2 void printArr(int arr[], int len)
 3 {
 4     for (int i = 0; i < len; ++i)
 5     {
 6         printf("%d\t", arr[i]);
 7     }
 8     printf("\n");
 9 }
10 void bulletSort(int arr[], int len)
11 {
12     int temp;
13     for (int i = 0; i < len - 1; ++i)//循环操作的次数
14     {
15         //从前往后进行比较 顺序不合适交换位置
16         for (int j = 0; j < len-1-i; j++)
17         {    //这里-i的目的是因为  比较一轮之后有一数字沉底  这个数字不在参与后续的比较
18             if (arr[j]>arr[j + 1])//前面比后面大  最后从小到大的顺序
19             {
20                 //交换两个元素的位置
21                 temp = arr[j];
22                 arr[j] = arr[j + 1];
23                 arr[j + 1] = temp;
24             }
25         }
26     }
27 }
28 void selectSort(int arr[], int len)//选择排序
29 {
30     //如果10个数据  选择9次
31     int k,temp;
32     for (int i = 0; i < len - 1; ++i)
33     {
34         //从生效的元素中选择一个最小的和arr[i]进行交换
35         k = i;
36         for (int j = i + 1; j < len; j++)
37         {
38             if (arr[j] < arr[k])
39             {
40                 k = j;//k保存最小元素的下标
41             }
42         }
43         //用最小元素  arr[k] 和arr[i]交换
44         temp = arr[k];
45         arr[k] = arr[i];
46         arr[i] = temp;
47 
48     }
49 }
50 void insertSort(int arr[], int len)
51 {
52     int temp,j;
53     for (int i = 0; i < len; i++)//第一个元素 视为有序 后面的元素一个个插入进来
54     {
55         //一步一步插入的步骤
56         temp = arr[i];
57         j = i - 1;
58         while (j >= 0 && arr[j]>temp)
59         {
60             arr[j + 1] = arr[j];//把这个数据往后拖
61             j--;
62         }
63         arr[j + 1] = temp;
64     }
65         
66 }
67 void quickSort(int arr[], int left, int right)//排序[left,right]这个区间的元素
68 {
69     if (left >= right) return;//只有一个元素不排
70     int temp, i = left, j = right;
71     while (i<j)
72     {
73         while (i<j&&arr[j] >= arr[left]) --j;
74         while (i<j&&arr[i]<arr[left]) ++i;
75         if (i<j)
76         {
77             //交换arr[i] arr[j];
78             temp = arr[i];
79             arr[i] = arr[j];
80             arr[j] = temp;
81         }
82     }
83     //交换arr[i]和arr[left]
84     temp = arr[i];
85     arr[i] = arr[left];
86     arr[left] = temp;
87 
88     quickSort(arr, left, i - 1);//排左边
89     quickSort(arr, i + 1, right);//排右边
90 }

排序.c

 1 /*
 2 复习 预处理命令--------------------------
 3 1.宏定义
 4     #define PI 3.141592654 文本替换 替换常用内容
 5     #define ADD(a,b) ((a)+(b)) 带参数的文本替换 防止替换之后优先级出现问题
 6 2.头文件包含
 7     #include<头文件>  如果系统自带  那么用<>
 8     #include"头文件"  如果自己写    那么用" "
 9 
10         你需要用到什么样的函数 需要#include 去包含它的头文件
11 
12         目的  函数--->拆成多个文件 拆开之后如何使用
13 3.条件编译
14     通过宏去判断使用的字符集
15     通过宏 判断用的什么环境....
16     #ifndef 宏
17 
18     #endif
19     #if 0
20     #endif
21 新内容 排序算法--------------------------
22 
23     算法 一组乱序数据  变成有--->排序  一类问题
24 
25         成绩从高到低排序
26         百度  根据热度进行排序(广告投放)
27 
28         一类问题  可能不止有一种算法
29             评判算法的好坏 时间复杂度和空间复杂度
30                 
31                 需要排序100个数据  排序10个数据
32 
33             排序n个数据  --->时间和n的关系   空间和n的关系
34 
35         算法和编程语言  算法-->方法  可以用c原因写代码  也可以是其他语言
36         算法和数据结构  排序   数据进行排序  数据的存放方式  影响代码的实现和效率
37             int a,b,c;
38             int arr[3];
39 
40         数据结构  组织和存放数据的方式    作用 管理数据  --->影响操作方式
41             算法  处理数据
42 
43             算法+数据结构
44 
45     同一种算法  最后写出的代码可能不一样
46 1.冒泡  从头到尾比较练歌相邻的元素  如果顺序和要排序的方式不一样 就交换
47 两个元素        比较一轮之后会让最大的数字沉底
48 2.选择 每次从剩下的元素中找到最小的 和前面的元素进行交换
49 3.插入
50 4.快速
51 
52 从小到大的方式进行排序
53 */
54 
55 #include<stdio.h>
56 #include"sort.h"
57 int main()
58 {
59     int arr[10] = { 3, 2, 8, 9, 1, 4, 4, 6, 7, 1 };
60     //bulletSort(arr, 10);//冒泡排序
61     //selectSort(arr, 10);//选择排序
62     //insertSort(arr, 10);//插入排序
63     quickSort(arr,0, 9);//快速排序
64     printArr(arr, 10);//输出
65     getchar();
66     return 0;
67 }

 

posted @ 2019-03-27 23:58  insist钢  阅读(383)  评论(0编辑  收藏  举报