排序(C语言实现)
来源:互联网 发布:阿里云soc报告 编辑:程序博客网 时间:2024/03/29 14:46
1. 交换排序
1.冒泡排序
1.基本原则:
比较两两相邻记录的关键字,使不满足排序要求的记录交换位置,直到n-1轮循环结束
2.操作顺序(从小到大为例):
(1)从头开始,比较 arr[i] 和 arr[i+1] ,如果第二个比第一个小,交换
(2)指针向后移动,i=i+1,再次比较 arr[i] 和 arr[i+1] ,判断是否需要交换
(3)循环操作以上步骤,直到指针指到最后一个位置
3.冒泡排序优化:
如果在排序中间数据已经有序,但是普通的冒泡排序还会继续循环,增加时间的消耗。所以需要在算法中设置一个简单的标记位 flag 来判断这轮循环是否交换了数据,开始时将flag 置为1,进入第一重循环将其置为0,如果有交换就把 flag 置为1,只有交换过数据(即 flag 置为1)才会继续进入下一轮循环,否则排序结束
4.代码实现:
void swap(int *a, int *b) //交换数据函数{int temp = *a;*a = *b;*b = temp;}
void BubbleSort(int arr[],int len) //参数:(数组,数组长度){int i, j;int flag = 1;for (i = 0; i < len - 1 && flag; i++){flag = 0;for (j = 0; j < len - 1 - i; j++){if (arr[j] > arr[j + 1]){swap(&arr[j], &arr[j + 1]);flag = 1;}}}}2.选择排序
1.简单选择排序
1.基本原则:
从待排序的数据中选出最值,交换该数据与待排序序列的头部数据,直到所有待排序的数据元素排序完毕
2.特点:
(1)可以将序列分为两部分,刚开始整个序列都视为待排序序列,有序序列为空
(2)第一轮循环先把最小值默认为第0个,进入第二轮循环
(3)第二轮循环先找到最小值的下标,如果循环结束后min的值与开始不同,再进行交换
(4)不断重复,直到数据排序结束
4.代码实现:
void SelectSort(int arr[], int len){int i, j, min;for (i = 0; i < len; i++){min = i;for (j = i + 1; j < len; j++){if (arr[min] > arr[j])min = j;}if (min != i){swap(&arr[min], &arr[i]);}}}
2.归并排序
1.基本思想:
分治法的典型应用,将已经有序的两个子序列合并,在合并过程中对元素排序,从而得到一个完整有序的序列,也就是保证小范围的数据有序,再让大范围的数据有序
2.过程:
(1)n个记录的序列,通常先视为n个小序列
(2)相邻的两个小序列两两比较再合并,就有n/2个序列,即每次序列的数量减半
(3)当序列数量为2时,进行归并排序,可以使原始序列完全有序
阅读全文
0 0
- 排序(C语言实现)
- C语言实现排序
- 直接插入排序(C语言实现)
- 计数排序算法(C语言实现)
- 冒泡排序算法(C语言实现)
- 简单选择排序(C语言实现)
- 希尔排序(C语言实现)
- 堆排序算法(c 语言实现)
- 排序算法(c语言实现)
- 二叉树实现排序(C语言)
- 堆排序(C语言实现)
- 希尔排序(C语言实现)
- 递归实现出入排序(C语言)
- 堆排序(C语言实现)
- 快速排序(c语言实现)
- 排序算法集锦(c语言实现)
- 冒泡排序(c语言实现)
- 归并排序(C语言实现)
- Scrapy学习笔记(2)分布式爬虫
- memcache的安装和使用步骤
- 一个数学题。
- 浅谈Angular.js(一)
- cobbler check: httpd does not appear to be running and proxying cobbler
- 排序(C语言实现)
- LeetCode 202 Happy Number(floyd判圈算法(龟兔赛跑算法))
- 深入介绍STBL——非常重要
- 数据库创建
- 把一个字符串中的所有的空格替换成“%20”
- 在2.5亿个整数中找出不重复的整数
- 常用JDBC驱动与连接字符串整理
- table表格加form表单实例及注册页面的搭建
- ionic 解析json串 带(路由 侧拉 效果 上拉刷新 下拉加载)