常见排序算法(C语言实现)
常见排序算法(C语言实现)
文章目录
- 常见排序算法(C语言实现)
- 一、插入排序
- 二、希尔排序
- 三、选择排序
- 四、堆排序
- 五、冒泡排序
- 六、快速排序
- 七、归并排序
一、插入排序
void insertSort(int arr[], int n){int i, j, tmp;for(i = 1; i < n; i++)for(j = i; j > 0; j--){if(arr[j] < arr[j-1]){tmp = arr[j];arr[j] = arr[j-1];arr[j-1] = tmp;}elsebreak;}return;
}
二、希尔排序
void shellSort(int arr[], int n){int i, j, elem;int k = n/2;while(k>=1){for(i = k; i < n; i ++){elem = arr[i];for(j = i; j >= k; j-=k){if(elem < arr[j-k])arr[j] = arr[j-k];elsebreak;}arr[j] = elem;}k = k/2;}
}
三、选择排序
void selectSort(int arr[], int n){int i, j , minValue, tmp;for(i = 0; i < n-1; i++){minValue = i;for(j = i + 1; j < n; j++)if(arr[minValue] > arr[j]) minValue = j; if(minValue != i){tmp = arr[i];arr[i] = arr[minValue];arr[minValue] = tmp;}}
}
四、堆排序
void AdjustDown(DataType* a, size_t n, int parent){//向下调整int child = parent * 2 + 1;while (child < n){//找到最大的孩子if ((child + 1 < n)&&(a[child+1]>a[child]))++child;//进行调整if (a[child]>a[parent]){Swap(&a[child], &a[parent]);parent=child;child = parent * 2 + 1;}elsebreak;}
}void HeapSort(DataType* a, size_t n)//堆排序,大顶堆{assert(a);for (int i = (n - 2) / 2; i >= 0; i--) AdjustDown(a, n, i);//n为元素个数,不是最后一个元素的下表,所以用(n-2)/2int end = n - 1;while (end > 0){Swap(&a[0], &a[end]);AdjustDown(a, end, 0);//从堆顶开始向下调整,因为有一半已经有序--end;}
}
五、冒泡排序
void bubbleSort(int arr[], int n){int i, j, tmp;for(i = 0; i < n - 1; i++)for(j = 1; j < n; j++) if(arr[j] < arr[j - 1]){tmp = arr[j];arr[j] = arr[j - 1];arr[j - 1] = tmp;}
}
六、快速排序
void QuickSort(int *arr, int low, int high){if (low < high){int i = low;int j = high;int k = arr[low];while (i < j){while(i < j && arr[j] >= k) j--;if(i < j)arr[i++] = arr[j]; while(i < j && arr[i] < k)// 从左向右找第一个大于等于k的数i++;if(i < j)arr[j--] = arr[i];}arr[i] = k;// 递归调用QuickSort(arr, low, i - 1); // 排序k左边QuickSort(arr, i + 1, high); // 排序k右边}
其实也可以直接使用C语言提供的qsort进行快排。
int cmpfunc (const void * a, const void * b){return ( *(int*)a - *(int*)b );
}
int* QuickSort(int* arr, int arrSize){int *ans=(int*)malloc(sizeof(int) * arrSize);//若直接输出原数组则不需要建立新的数组qsort(arr,arrSize,sizeof(int),cmpfunc);for(int i = 0;i < k;i++)//若直接输出原数组则不需要转译新的数组ans[i] = arr[i];return ans;//若直接输出原数组则return arr
}
七、归并排序
void merge(int arr[], int l, int mid, int r){int len,i, pl, pr;int *tmp = NULL;len = r - l + 1;tmp = (int*)malloc(len * sizeof(int)); memset(tmp, 0x0, len * sizeof(int));pl = l;pr = mid + 1;i = 0;while(pl <= mid && pr <= r) {if(arr[pl] < arr[pr]) tmp[i++] = arr[pl++];elsetmp[i++] = arr[pr++];}while(pl <= mid)tmp[i++] = arr[pl++];while(pr <= r)tmp[i++] = arr[pr++];for(i = 0; i < len; i++)arr[i+l] = tmp[i];free(tmp);return;
}
常见排序算法(C语言实现)相关推荐
- 十种常见排序算法欢聚一堂
文章目录 1.常见排序算法分类 2.非线性时间比较类排序 2.1 交换类排序 2.1.1 冒泡排序 2.1.2 快速排序 2.2 插入类排序 2.2.1 直接插入排序 2.2.2 Shell 排序 2 ...
- 常见排序算法及对应的时间复杂度和空间复杂度
排序算法经过了很长时间的演变,产生了很多种不同的方法.对于初学者来说,对它们进行整理便于理解记忆显得很重要.每种算法都有它特定的使用场合,很难通用.因此,我们很有必要对所有常见的排序算法进行归纳. 排 ...
- php常见排序算去,PHP兑现常见排序算法
PHP实现常见排序算法 //插入排序(一维数组) function insert_sort($arr){ $count = count($arr); for($i=1; $i $tmp = $arr[ ...
- Java常见排序算法
Java常见排序算法 转载于:https://www.cnblogs.com/hfultrastrong/p/7829889.html
- Java常见排序算法之插入排序
一.概述 本节由小千给大家分享Java常见排序算法之插入排序,之前我们说过排序是算法中的一部分.所以我们学习排序也是算法的入门,为了能让大家感受到排序是算法的一部分,我举个例子证明一下:比如麻将游戏, ...
- android studio插入数据表中没有_学Java能拿高薪吗 Java中常见排序算法有哪些
学Java能拿高薪吗?Java中常见排序算法有哪些?作为老牌编程语言,Java拥有广阔的市场占有率,几乎90%以上的大中型互联网应用系统在服务端开发都会首选Java.为了加入到Java这一高薪行业,很 ...
- Java 实现常见排序算法
Java 实现常见排序算法 1. 综述 复习常见排序算法,用Java实现. 2. 代码 1 package cn.edu.tju.scs; 2 3 public class Sort { 4 publ ...
- 常见排序算法_解释的算法-它们是什么以及常见的排序算法
常见排序算法 In its most basic form, an algorithm is a set of detailed step-by-step instructions to comple ...
- python实现常见排序算法
python实现常见排序算法 快速排序 思想:取出第一个元素把它放到序列的中间某一个正确位置,以它进行分割成左边和右边,再分别对左边和右边进行取元素分割(递归) 递归实现 def quicksort( ...
最新文章
- Petrozavodsk Summer-2016. Ural FU Dandelion Contest
- 七 递归与二分法、匿名函数、内置函数
- python语言介绍-Python这门语言的大概介绍
- 实战Nginx与PHP(FastCGI)的安装、配置与优化
- Spring IOC 容器源码分析 - 循环依赖的解决办法
- 卡牌特效: svg不规则倒计时动效
- sqlserver 递归查询
- 数据科学 IPython 笔记本 8.15 Matplotlib 中的三维绘图
- 将xml转为txt_HZ文章转短视频工具v1.0 快速将文章转为短视频 自动配音 配字幕 配图...
- javascript option 菜单图标_善用 CSS,不用 JavaScript 也能写出这些元素
- web javescript与cookie理解
- Pycharm 主题字体推荐(亮色)
- yuv422转rgb565
- 5e检索服务器信息,服务器检索 - 找服玩|Minecraft服务器列表
- java 正数转负数_Java程序将正整数转换为负数,并将负整数转换为正数
- FineReport缺失字体检测
- python宏观经济研究应用_宏观经济学研究通常用什么软件?
- 看起来为空的字符串,长度却是1?
- func() takes 0 positional arguments but 1 was given
- 11月最新编程排行榜出炉,这个语言超过了C蝉联榜首~
热门文章
- 对千变万化数据的处理 12work
- 【入门】已知一个圆的半径,求解该圆的面积和周长
- 深度学习网络调参技巧
- fsw是什么意思_什么叫FSW焊接
- vue中实现Excel导入导出功能
- dbcp连接池出现的问题情况org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory
- Android-skin-support 一款用心去做的Android 换肤框架
- unity3d 切换场景过度动画
- IDEA 2022 Translation 翻译文档失败: 未知错误
- 矩阵向右旋转90° — C语言