基于数组的排序算法
来源:互联网 发布:python日常实用小脚本 编辑:程序博客网 时间:2024/06/11 11:19
常用的基于数组的排序算法代码详解(一)
在完成各个排序的代码前,先完成一个交换函数和打印函数。
void show(int *arr,int len){ //循环打印数组 for(int i = 0;i < len;i++) { printf("%d ",arr[i]); } printf("\n");} //交换函数static void swap(int *p,int *s){ int tmp; tmp = *p; *p = *s; *s = tmp;}
sort.h中的函数声明#ifndef _SORT_H_#define _SORT_H_void exchange_sort (int *arr,int len);void bubble_sort(int *arr,int len); void bubble_sort_ex(int *arr,int len);void select_sort(int *arr,int len);void insert_sort(int *arr,int len);void insert_sort_ex(int *arr,int len);void shell_sort(int *arr,int len);int partition(int *arr,int left,int right);void quick(int *arr,int left,int right);void quick_sort(int *arr,int len);void quick_sort_stack(int *arr,int len);void heap_sort(int *arr,int len);void meger_sort(int *arr,int len);void show(int *arr,int len);int *get_arr(int len);#endif
1,交换排序
空间复杂度:O(1) 时间复杂度:O(n^2)
思路:序列中的元素不断交换,第1个元素的值与后面的所有元素的值比较大小,如果其中一个值比第1个值小,进行交换。依次类推,再将第2个元素与后面的所有元素比较交换,直到n-1个元素为止。时间复杂度较高,最终达到序列有序。
void exchange_sort (int *arr,int len) { for(int i = 0;i < len-1;i++) { for(int j = i+1;j < len;j++) { if(arr[i] > arr[j]) { swap(&arr[i],&arr[j]); } } } }
2,冒泡排序:
空间复杂度:O(1) 时间复杂度:O(n^2)
思路:将序列当中的左右元素,依次比较,始终保证右边的元素始终大于左边的元素;( 第一轮结束后,序列最后一个元素一定是当前序列的最大值;)对序列当中剩下的n-1个元素再次执行上述步骤。对于长度为n的序列,一共需要执行n-1轮比较(利用while循环可以减少执行次数)
void bubble_sort(int *arr,int len);{ for(int i = 0;i<len-1;i++) { for(int j = 0;j<len-1-i;j++) { if(arr[j] > arr[j+1]) { swap(&arr[j],&arr[j+1]); } }}//冒泡排序改进void bubble_sort_ex(int *arr,int len){ bool flag = true; for(int i = 0;i<len-1 && flag;i++) { flag = false; for(int j = 0;j<len-1-i;j++) { if(arr[j] > arr[j+1]) { swap(&arr[j],&arr[j+1]); flag = true; } }}
3,选择排序
空间复杂度:O(1) 时间复杂度:O(n^2)
思路:比较+交换。从待排序序列中,假设第一个数为最小值,将其与剩余元素进行比较,用下标变量k来记录最小数所在的元素的下标。一趟比较完成后,将arr[0]与arr[k]进行交换。然后设第2位存放次小的数,依次类推。
int min = arr[0]; int min_index = 0; int i; int j; for(i = 0;i<len - 1;i++) { min = arr[i]; min_index = i; for(j = i+1;j<len;j++) { if(min > arr[j]) { min = arr[j]; min_index = j; } } if(i != min_index) { swap(&arr[j],&arr[min_index]); } }
4,插入排序
空间复杂度:O(1) 时间复杂度:O(n^1.5)/O(n^2)
思路:思路:直接插入排序的核心思想就是:将数组中的所有元素依次跟前面已经排好的元素相比较,如果选择的元素比已排序的元素小,则交换,直到全部元素都比较过。
void insert_sort_ex(int *arr,int len){ int tmp; int i; int j; for(i = 1;i < len;i++) { tmp = arr[i]; for(j = i - 1;j >= 0;j--) { if(tmp > arr[j]) { break; } } }}
以上是四种排序的代码详解,若存在问题,欢迎指正。
阅读全文
0 0
- 基于数组的排序算法
- 基于数组的排序算法
- 并行排序,基于数组的桶算法
- 基于数组的堆排序算法的C语言实现
- 基于数组的直接插入排序算法和代码实现
- 数组的排序算法
- 数组的排序算法
- 数组的排序算法
- 基于比较的排序算法
- 算法 基于比较的排序
- 基于插入的排序算法
- 基于选择的排序算法
- 数组排序的常用算法
- 多维数组排序的算法
- 数组基本的排序算法
- 一种基于归并排序及随机数生成器对一个给定数组进行随机排列的算法
- c语言核心整理之深入数组,熟练常用的基于数组的排序和搜索算法
- 基于数组的二分查找算法
- Millionaire
- Lua基础---运算符
- 安装ElasticSearch过程遇到的坑
- 关于设置背景颜色影响的范围
- 工厂模式
- 基于数组的排序算法
- 问答入门----HTML5 / js多线程
- poll服务器
- mysql 查找具体sql执行性能
- KMP算法的时间复杂度
- TP框架隐藏index.php和Home的访问名
- OpenGL GAO访问冲突(glBindVertexArray)
- Hinton Neural Networks for Machine Learning 第二讲: 感知机-几何描述
- python计算两个地址之间的距离