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 ", arr[i]); 7 } 8 printf(" "); 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 }