常见排序算法(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. 十种常见排序算法欢聚一堂

    文章目录 1.常见排序算法分类 2.非线性时间比较类排序 2.1 交换类排序 2.1.1 冒泡排序 2.1.2 快速排序 2.2 插入类排序 2.2.1 直接插入排序 2.2.2 Shell 排序 2 ...

  2. 常见排序算法及对应的时间复杂度和空间复杂度

    排序算法经过了很长时间的演变,产生了很多种不同的方法.对于初学者来说,对它们进行整理便于理解记忆显得很重要.每种算法都有它特定的使用场合,很难通用.因此,我们很有必要对所有常见的排序算法进行归纳. 排 ...

  3. php常见排序算去,PHP兑现常见排序算法

    PHP实现常见排序算法 //插入排序(一维数组) function insert_sort($arr){ $count = count($arr); for($i=1; $i $tmp = $arr[ ...

  4. Java常见排序算法

    Java常见排序算法 转载于:https://www.cnblogs.com/hfultrastrong/p/7829889.html

  5. Java常见排序算法之插入排序

    一.概述 本节由小千给大家分享Java常见排序算法之插入排序,之前我们说过排序是算法中的一部分.所以我们学习排序也是算法的入门,为了能让大家感受到排序是算法的一部分,我举个例子证明一下:比如麻将游戏, ...

  6. android studio插入数据表中没有_学Java能拿高薪吗 Java中常见排序算法有哪些

    学Java能拿高薪吗?Java中常见排序算法有哪些?作为老牌编程语言,Java拥有广阔的市场占有率,几乎90%以上的大中型互联网应用系统在服务端开发都会首选Java.为了加入到Java这一高薪行业,很 ...

  7. Java 实现常见排序算法

    Java 实现常见排序算法 1. 综述 复习常见排序算法,用Java实现. 2. 代码 1 package cn.edu.tju.scs; 2 3 public class Sort { 4 publ ...

  8. 常见排序算法_解释的算法-它们是什么以及常见的排序算法

    常见排序算法 In its most basic form, an algorithm is a set of detailed step-by-step instructions to comple ...

  9. python实现常见排序算法

    python实现常见排序算法 快速排序 思想:取出第一个元素把它放到序列的中间某一个正确位置,以它进行分割成左边和右边,再分别对左边和右边进行取元素分割(递归) 递归实现 def quicksort( ...

最新文章

  1. Petrozavodsk Summer-2016. Ural FU Dandelion Contest
  2. 七 递归与二分法、匿名函数、内置函数
  3. python语言介绍-Python这门语言的大概介绍
  4. 实战Nginx与PHP(FastCGI)的安装、配置与优化
  5. Spring IOC 容器源码分析 - 循环依赖的解决办法
  6. 卡牌特效: svg不规则倒计时动效
  7. sqlserver 递归查询
  8. 数据科学 IPython 笔记本 8.15 Matplotlib 中的三维绘图
  9. 将xml转为txt_HZ文章转短视频工具v1.0 快速将文章转为短视频 自动配音 配字幕 配图...
  10. javascript option 菜单图标_善用 CSS,不用 JavaScript 也能写出这些元素
  11. web javescript与cookie理解
  12. Pycharm 主题字体推荐(亮色)
  13. yuv422转rgb565
  14. 5e检索服务器信息,服务器检索 - 找服玩|Minecraft服务器列表
  15. java 正数转负数_Java程序将正整数转换为负数,并将负整数转换为正数
  16. FineReport缺失字体检测
  17. python宏观经济研究应用_宏观经济学研究通常用什么软件?
  18. 看起来为空的字符串,长度却是1?
  19. func() takes 0 positional arguments but 1 was given
  20. 11月最新编程排行榜出炉,这个语言超过了C蝉联榜首~

热门文章

  1. 对千变万化数据的处理 12work
  2. 【入门】已知一个圆的半径,求解该圆的面积和周长
  3. 深度学习网络调参技巧
  4. fsw是什么意思_什么叫FSW焊接
  5. vue中实现Excel导入导出功能
  6. dbcp连接池出现的问题情况org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory
  7. Android-skin-support 一款用心去做的Android 换肤框架
  8. unity3d 切换场景过度动画
  9. IDEA 2022 Translation 翻译文档失败: 未知错误
  10. 矩阵向右旋转90° — C语言