一、快速排序(C源码)

  1. #include <stdlib.h>
  2. #include <stdio.h>
  3.  
  4. int adjust(int a[],int start,int end)
  5. {
  6. int i=start;
  7. int j=end;
  8. int temp=a[start];
  9. while(i<j)
  10. {
  11. while(i<j&&temp<a[j])
  12. j--;
  13. if(i<j)
  14. {
  15. a[i]=a[j];
  16. i++;
  17. }
  18. while(i<j&&temp>=a[i])
  19. i++;
  20. if(i<j)
  21. {
  22. a[j]=a[i];
  23. j--;
  24. }
  25. }
  26. a[i]=temp;
  27. return i;
  28. }
  29.  
  30. void print_array(int array[], int n)
  31. {
  32. int i;
  33. for( i = ; i < n ; ++i )
  34. printf("%d ", array[i]);
  35. printf("\n");
  36. }
  37.  
  38. void quiksort(int a[],int start,int end)
  39. {
  40. if(start<end)
  41. {
  42. int m=adjust(a,start,end);
  43. quiksort(a,start,m-);
  44. quiksort(a,m+,end);
  45. }
  46. }
  47.  
  48. int main()
  49. {
  50. int array[] = {, , , , , ,};
  51. quiksort(array, , );
  52. print_array(array, );
  53. system("pause");
  54. return ;
  55. }

二、堆排序

  1. #include <stdlib.h>
  2. #include <stdio.h>
  3.  
  4. //最大堆的调整函数
  5. //注意a[0]不参与排序
  6. void adjust(int a[],int s,int m)
  7. {
  8. int temp=a[s];
  9. int j;
  10. for(j=*s;j<=m;j=*j)
  11. {
  12. if(j<m&&a[j]<a[j+])
  13. j++;
  14. if(temp>a[j])
  15. break;
  16. a[s]=a[j];
  17. s=j;
  18. }
  19. a[s]=temp;
  20. }
  21.  
  22. //堆排序函数
  23. void heapsort(int a[],int n)
  24. {
  25. int i;
  26. int temp;
  27. for(i=n/;i>=;i--)
  28. adjust(a,i,n);
  29. for(i=n;i>;i--)
  30. {
  31. temp=a[];
  32. a[]=a[i];
  33. a[i]=temp;
  34. adjust(a,,i-);
  35. }
  36. }
  37.  
  38. void print_array(int array[], int n)
  39. {
  40. int i;
  41. for( i = ; i < n ; ++i )
  42. printf("%d ", array[i]);
  43. printf("\n");
  44. }
  45.  
  46. int main()
  47. {
  48. int array[] = {-,, , , , , ,};
  49. heapsort(array,);
  50. print_array(array, );
  51. system("pause");
  52. return ;
  53. }

三、 二路归并排序

  1. #include <stdlib.h>
  2. #include <stdio.h>
  3.  
  4. //合并相邻的两个有序组
  5. //a[u,...,v-1]和a[v,...,t]
  6. void merge(int a[],int b[],int u,int v,int t)
  7. {
  8. int i,j,k;
  9. i=u;
  10. j=v;
  11. k=u;
  12. while(i<=v-&&j<=t)
  13. {
  14. if(a[i]<=a[j])
  15. b[k++]=a[i++];
  16. else
  17. b[k++]=a[j++];
  18. }
  19. while(i<=v-)
  20. {
  21. b[k++]=a[i++];
  22. }
  23. while(j<=t)
  24. {
  25. b[k++]=a[j++];
  26. }
  27. }
  28.  
  29. void onepass(int a[],int b[],int s,int n)
  30. {
  31. int u,v,t;
  32. u=;
  33. v=s;
  34. t=*s-;
  35. while(n-u>=*s)
  36. {
  37. merge(a,b,u,v,t);
  38. u+=*s;
  39. v+=*s;
  40. t+=*s;
  41. }
  42. if(n-u>s)
  43. merge(a,b,u,v,n-);
  44. else
  45. {
  46. for(;u<n;u++)
  47. b[u]=a[u];
  48. }
  49. }
  50.  
  51. void mergesort(int a[],int n)
  52. {
  53. int s=;
  54. int i;
  55. int *b=(int*)malloc(n*sizeof(int));
  56. while(s<n)
  57. {
  58. onepass(a,b,s,n);
  59. s=*s;
  60. if(s>=n)
  61. {
  62. for(i=;i<n;i++)
  63. a[i]=b[i];
  64. }
  65. else
  66. {
  67. onepass(b,a,s,n);
  68. s=*s;
  69. }
  70. }
  71. free(b);
  72. }
  73. void print_array(int array[], int n)
  74. {
  75. int i;
  76. for( i = ; i < n ; ++i )
  77. printf("%d ", array[i]);
  78. printf("\n");
  79. }
  80.  
  81. int main()
  82. {
  83. int array[] = {-,,,,,,,,};
  84. mergesort(array,);
  85. print_array(array, );
  86. system("pause");
  87. return ;
  88. }

二路归并排序(2)

  1. #include <stdlib.h>
  2. #include <stdio.h>
  3.  
  4. //合并相邻的两个有序组
  5. //a[u,...,v-1]和a[v,...,t]
  6. void merge(int a[],int b[],int u,int v,int t)
  7. {
  8. int i,j,k;
  9. i=u;
  10. j=v;
  11. k=u;
  12. while(i<=v-&&j<=t)
  13. {
  14. if(a[i]<=a[j])
  15. b[k++]=a[i++];
  16. else
  17. b[k++]=a[j++];
  18. }
  19. while(i<=v-)
  20. {
  21. b[k++]=a[i++];
  22. }
  23. while(j<=t)
  24. {
  25. b[k++]=a[j++];
  26. }
  27. }
  28.  
  29. void onepass(int a[],int b[],int s,int n)
  30. {
  31. int u,v,t;
  32. u=;
  33. v=s;
  34. t=*s-;
  35. while(n-u>=*s)
  36. {
  37. merge(a,b,u,v,t);
  38. u+=*s;
  39. v+=*s;
  40. t+=*s;
  41. }
  42. if(n-u>s)
  43. merge(a,b,u,v,n-);
  44. else
  45. {
  46. for(;u<n;u++)
  47. b[u]=a[u];
  48. }
  49. }
  50.  
  51. void mergesort(int a[],int n)
  52. {
  53. int s;
  54. int i;
  55. int *b=(int*)malloc(n*sizeof(int));
  56. for(s=;s<n;s=*s)
  57. {
  58. onepass(a,b,s,n);
  59. s=*s;
  60. if(s>=n)
  61. {
  62. for(i=;i<n;i++)
  63. a[i]=b[i];
  64. }
  65. else
  66. onepass(b,a,s,n);
  67. }
  68. }
  69. void print_array(int array[], int n)
  70. {
  71. int i;
  72. for( i = ; i < n ; ++i )
  73. printf("%d ", array[i]);
  74. printf("\n");
  75. }
  76.  
  77. int main()
  78. {
  79. int array[] = {-,,,,,,,,};
  80. mergesort(array,);
  81. print_array(array, );
  82. system("pause");
  83. return ;
  84. }

四、冒泡排序

  1. #include <stdlib.h>
  2. #include <stdio.h>
  3.  
  4. void bubblesort(int a[],int n)
  5. {
  6. int i,j;
  7. int chage=;
  8. int temp;
  9. for(i=n-;chage&&i>;i--)
  10. {
  11. chage=;
  12. for(j=;j<i;j++)
  13. {
  14. if(a[j]>a[j+])
  15. {
  16. temp=a[j];
  17. a[j]=a[j+];
  18. a[j+]=temp;
  19. chage=;
  20. }
  21. }
  22. }
  23. }
  24.  
  25. void print_array(int array[], int n)
  26. {
  27. int i;
  28. for( i = ; i < n ; ++i )
  29. printf("%d ", array[i]);
  30. printf("\n");
  31. }
  32.  
  33. int main()
  34. {
  35. int array[] = {-,,,,,,,,};
  36. bubblesort(array,);
  37. print_array(array, );
  38. system("pause");
  39. return ;
  40. }

五、直接选择排序

  1. #include <stdlib.h>
  2. #include <stdio.h>
  3.  
  4. void selectsort(int a[],int n)
  5. {
  6. int i,j;
  7. int k,max; //记录最大值下标和最大值
  8. for(i=n-;i>=;i--)
  9. {
  10. k=i;
  11. max=a[i];
  12. for(j=;j<i;j++)
  13. {
  14. if(a[j]>max)
  15. {
  16. max=a[j];
  17. k=j;
  18. }
  19. }
  20. a[k]=a[i];
  21. a[i]=max;
  22. }
  23. }
  24.  
  25. void print_array(int array[], int n)
  26. {
  27. int i;
  28. for( i = ; i < n ; ++i )
  29. printf("%d ", array[i]);
  30. printf("\n");
  31. }
  32.  
  33. int main()
  34. {
  35. int array[] = {-,,,,,,,,};
  36. selectsort(array,);
  37. print_array(array, );
  38. system("pause");
  39. return ;
  40. }

排序小结(C版)的更多相关文章

  1. 排序小结(C++版)

    一.快速排序 #include <iostream> using namespace std; int adjust(int a[],int start,int end) { int i, ...

  2. 排序小结(java版)

    一.归并排序 package org.lxh.demo08.b; class Sort { private int[] a; private int n; Sort(int n) { a=new in ...

  3. iOS可视化动态绘制八种排序过程(Swift版)

    前面几篇博客都是关于排序的,在之前陆陆续续发布的博客中,我们先后介绍了冒泡排序.选择排序.插入排序.希尔排序.堆排序.归并排序以及快速排序.俗话说的好,做事儿要善始善终,本篇博客就算是对之前那几篇博客 ...

  4. 排序算法系列:选择排序算法JAVA版(靠谱、清晰、真实、可用、不罗嗦版)

    在网上搜索算法的博客,发现一个比较悲剧的现象非常普遍: 原理讲不清,混乱 啰嗦 图和文对不上 不可用,甚至代码还出错 我总结一个清晰不罗嗦版: 原理: 从数组头元素索引i开始,寻找后面最小的值(比i位 ...

  5. 排序算法Java版,以及各自的复杂度,以及由堆排序产生的top K问题

    常用的排序算法包括: 冒泡排序:每次在无序队列里将相邻两个数依次进行比较,将小数调换到前面, 逐次比较,直至将最大的数移到最后.最将剩下的N-1个数继续比较,将次大数移至倒数第二.依此规律,直至比较结 ...

  6. 常用排序算法--java版

    package com.whw.sortPractice; import java.util.Arrays; public class Sort { /** * 遍历一个数组 * @param sor ...

  7. 秒杀9种排序算法(JavaScript版)

    一:你必须知道的 1> JS原型 2> 排序中的有序区和无序区 3> 二叉树的基本知识 如果你不知道上面三个东西,还是去复习一下吧,否则,看下面的东西有点吃力. 二:封装丑陋的原型方 ...

  8. Qt之QHeaderView自定义排序(终极版)

    简述 本节主要解决自定义排序衍生的第二个问题-将整形显示为字符串,而排序依然正常. 下面我们介绍三种方案: 委托绘制 用户数据 辅助列 很多人也许会有疑虑,平时都用delegate来绘制各种按钮.图标 ...

  9. 常见的链表排序(Java版)

    上篇博客中讲解了九大内部排序算法,部分算法还提供了代码实现,但是那些代码实现都是基于数组进行排序的,本篇博客就以链表排序实现几种常见的排序算法,以飨读者. 快速排序的链表实现 算法思想:对于一个链表, ...

随机推荐

  1. Linux多节点互信配置

    SSH互信设置步骤:   1. 每个节点上分别生成自己的公钥和私钥   2. 将各节点的公钥文件汇总到一个总的认证文件authorized_keys中   3. 将这个包含了所有节点公钥的认证文件au ...

  2. 随机获取数据库中的某一条数据(基于yii2框架开发)

    注意: 使用PHP函数array_rand()得到的是这个数组中的那个值相对应的下标键值,需要配合原来的数组进行,例如: $rand_keys = array_rand($ids,1); $id = ...

  3. Linux中/proc目录下文件详解

    转载于:http://blog.chinaunix.net/uid-10449864-id-2956854.html Linux中/proc目录下文件详解(一)/proc文件系统下的多种文件提供的系统 ...

  4. (6) 深入理解Java Class文件格式(五)

    前情回顾 本专栏的前几篇博文, 对class文件中的常量池进行了详细的解释. 前文讲解了常量池中的7种数据项, 它们分别是: CONSTANT_Utf8_info CONSTANT_NameAndTy ...

  5. centos6.6编译安装lnmp系列之nginx

    简介: 环境:虚拟机+centos6.6 Cmake下载地址:http://www.cmake.org/files/v3.0/cmake-3.0.2.tar.gz Nginx 下载地址: http:/ ...

  6. C++去掉字符串首尾的 空格 换行 回车

    /* *去掉字符串首尾的 \x20 \r \n 字符 */ void TrimSpace(char* str) { ; char *end = str; char *p = str; while(*p ...

  7. uploadify springMVC

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...

  8. Java 中文字符串编码之GBK转UTF-8

    写过两篇关于编码的文章了,以为自己比较了解编码了呢?! 结果今天又结结实实的上了一课. 以前转来转去解决的问题终归还是简单的情形.即iso-8859-1转utf-8,或者iso-8859-1转gbk, ...

  9. jquery总结04-DOM节点操作

    一般js操作节点 ①创建节点(元素文本)document.createElement  innerHTML ②添加属性 setAttribute ③加入文档 appendChild 操作繁琐还有兼容性 ...

  10. 解决Jenkins打不开浏览器问题

    参考:http://blog.csdn.net/achang21/article/details/45096003 1.控制面板禁用掉jenkins服务 2.java -jar jenkins.war ...