1.冒泡排序

void swap(int* a,int*b)
{int temp=*a;*a=*b;*b=temp;
}void bubbleSort(int arr[],int n)
{for(int i=0;i<n-1;i++)   //n个数,一共需要(n-1)趟{//第二层就是控制第(i+1)趟(因为i从0开始)所比较的次数,第 (i +1)趟比较了(n-1-i) 次for(int j=0;j<n-1-i;j++)  {if(arr[j]>arr[j+1])swap(&arr[j],&arr[j+1]);}}
}//改良版void newbubbleSort(int arr[],int n)
{int flag=1;  //标识还没排序好for(int i=0;i<n-1 && flag==1;i++)  {flag=0;  //认为已经排序好for(int j=0;j<n-1-i;j++)  {if(arr[j]>arr[j+1]){swap(&arr[j],&arr[j+1]);flag=1;}}}}

2.选择排序

//用冒泡排序的swap()函数//选择排序
void selectSort(int arr[],int n)
{for(int i=0;i<n-1;i++)   //n个数,只需(n-1)趟 {int min=i;for(int j=i+1;j<n;j++){if(arr[j]<arr[min])min=j;}if(min!=i)swap(&arr[min],&arr[i]);}
}

3.插入排序

//插入排序
void insertSort(int arr[],int n)
{for(int i=1;i<n;i++)   //i从1开始,把arr[0]当做已有序的{//int temp=arr[i];if(arr[i]<arr[i-1]){int temp=arr[i];   //设置哨兵 ,写在这里相对好点int j=i-1;for(;j>=0 && arr[j]>temp;j--){arr[j+1]=arr[j];   //数据后移}arr[j+1]=temp;}}
}

4.希尔排序

//希尔排序
void shellSort(int arr[],int len)
{int increase=len;do{increase=increase/3+1;for(int i=0;i<increase;++i){for(int j=i+increase;j<len;j+=increase){if(arr[j]<arr[j-increase]){int temp=arr[j];int k=j-increase;for(;k>=0 && arr[k]>temp;k-=increase){arr[k+increase]=arr[k];}arr[k+increase]=temp;}}}}while(increase>1);
}

5.堆排序

void heapAdjust(int arr[],int pos,int len)
{int max=pos;int lChild=max*2+1;int rChild=max*2+2;if(lChild<len && arr[max]<arr[lChild])max=lChild;if(rChild<len &&arr[max]<arr[rChild])max=rChild;if(max!=pos){swap(&arr[max],&arr[pos]);heapAdjust(arr,max,len);}
}//堆排序
void heapSort(int arr[],int len)
{//初始化堆for(int i=len/2-1;i>=0;i--){heapAdjust(arr,i,len);}for(int i=len-1;i>=0;i--){swap(&arr[0],&arr[i]);heapAdjust(arr,0,i);}
}

6.归并排序

void merge(int arr[],int start,int mid,int end,int* temp)
{int i_start=start;int i_end=mid;int j_start=mid+1;int j_end=end;int length=0;        //记录临时数组元素的个数while(i_start<=i_end && j_start<=j_end){if(arr[i_start]<arr[j_start]){temp[length]=arr[i_start++];}else{temp[length]=arr[j_start++];}length++;}while(i_start<=i_end){temp[length++]=arr[i_start++];}while(j_start<=j_end){temp[length++]=arr[j_start++];}//把临时数组的元素赋值到原始数组中for(int i=0;i<length;i++)arr[i+start]=temp[i];}//归并排序
void mergingSort(int arr[],int start,int end,int* temp)
{if(start>=end)return;int mid=(start+end)/2;//左半边排序mergingSort(arr,start,mid,temp);//右半边排序mergingSort(arr,mid+1,end,temp);//归并merge(arr,start,mid,end,temp);
}

7.快速排序

//快速排序        ,挖坑填数
void quickSort(int arr[],int start,int end)
{int i=start;int j=end;int temp=arr[start];if(i<j)   //判断递归是否符合条件的{while(i<j){while(i<j && arr[j]>temp)     从后往前寻找比temp小的值j--;if(i<j){arr[i++]=arr[j];      //将比temp小的值填入坑内,i往后移动一位}while(i<j && arr[i]<temp)    //从前往后寻找比temp大的值i++;if(i<j){arr[j--]=arr[i];    //将比temp大的值填入坑内,j往前移动一位}}arr[j]=temp;quickSort(arr,start,j-1);quickSort(arr,j+1,end);}
}

【无标题】排序算法(C语言)相关推荐

  1. 经典的十种排序算法 C语言版

    经典的十种排序算法(C语言版) 1.冒牌排序 冒牌排序的特点 ​ 一趟一趟的比较待排序的数组,每趟比较中,从前往后,依次比较这个数和下一个数的大小,如果这个数比下一个数大,则交换这两个数,每趟比较后, ...

  2. 九大排序算法-C语言实现及详解

    概述 排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存. 我们这里说说八大排序就是内部排序. 当n较大, ...

  3. 部分排序算法c语言实现

    代码比较粗糙,主要是用于对排序算法的理解,因而忽略了边界和容错处理相关代码. 相关文档: Insert Sort  ,Bubble Sort ,Select Sort ,Shell sort ,Qui ...

  4. 数据结构之排序算法(C语言)

    一.冒泡排序 冒泡排序是最简单的排序之一了,其大体思想就是通过与相邻元素的比较和交换来把小的数交换到最前面.这个过程类似于水泡向上升一样,因此而得名.举个栗子,对5,3,8,6,4这个无序序列进行冒泡 ...

  5. 鸡尾酒排序算法c语言,[golang] 数据结构-鸡尾酒排序

    吐个槽 又是一个不正经取名的排序算法.真要说和鸡尾酒间的关系,大概就是想喝到鸡尾酒(得到排序好的队列)就要摇晃酒杯让不同的成分混合均匀(向两个方向冒泡排序) 原理 鸡尾酒排序(Cocktail Sor ...

  6. 排序算法c语言描述---归并排序

    排序算法系列学习,主要描述冒泡排序,选择排序,直接插入排序,希尔排序,堆排序,归并排序,快速排序等排序进行分析. 文章规划: 一.通过自己对排序算法本身的理解,对每个方法写个小测试程序. 具体思路分析 ...

  7. 五种排序算法 -- Python语言实现

    交换两项位置方法: # -*- coding: utf-8 -*- def swap(lyst, i, j):temp = lyst[i]lyst[i] = lyst[j]lyst[j] = temp ...

  8. 加标志量的选择排序算法c语言,置换选择排序算法详解(C语言实现)

    上一节介绍了增加 k-路归并排序中的 k 值来提高外部排序效率的方法,而除此之外,还有另外一条路可走,即减少初始归并段的个数,也就是本章第一节中提到的减小 m 的值. m 的求值方法为:m=⌈n/l⌉ ...

  9. 【无标题】7-11 sdut-C语言实验- 数列有序! 7-12 sdut-C语言实验- 中位数 7-13 sdut-C语言实验-各位数字之和排序 7-14 sdut-C语言实验- 冒泡排序中数据交换

    7-11 sdut-C语言实验- 数列有序! 分数 14 全屏浏览题目 切换布局 作者 马新娟 单位 山东理工大学 有n(n<=100)个整数,已经按照从大到小顺序排列好,现在另外给一个整数m, ...

  10. 睡眠排序算法c语言实现,Linux 进程必知必会

    只是简单的描述了一下 Linux 基本概念,通过几个例子来说明 Linux 基本应用程序,然后以 Linux 基本内核构造来结尾.那么本篇文章我们就深入理解一下 Linux 内核来理解 Linux 的 ...

最新文章

  1. 创建github账号
  2. react native 导入组件
  3. Java 实现日期 Date 的赋值
  4. Matlab 图像处理的一些杂记
  5. Bootstrap富文本编辑器-bootstrap-wysiwyg
  6. Linux的触屏手势软件安装,如何添加Mac的多点触控手势到Ubuntu | MOS86
  7. 由方位角和长度如何确定坐标 已知第一个点的坐标
  8. 10. SQL 注入
  9. Excel导入导出SQL server数据库
  10. 异常信息:Unable to update index for aliyun|http://maven.aliyun.com/nexus/content/groups/public/ 解决方法
  11. 大学计算机基础排版和打印毕业论文,大学计算机基础-电子教案第5章
  12. 目前使用SAP的公司列表
  13. 82 将真分数分解为埃及分数
  14. fNIRS–EEG监测人脑活动和氧合作用的研究进展
  15. HBase MOB特性介绍
  16. 如何系统得对目标检测模型的误差分析?
  17. Android进阶_Handler和Handler.Callback和Message
  18. 方维分享社区系统——详解伪静态开启方法
  19. Logistic回归----葡萄酒案例
  20. ubuntu windows 双系统 修改启动项名称

热门文章

  1. python单元测试框架作用_Python单元测试框架:Pytest简介
  2. Compilation failed: internal java compiler error
  3. 时间序列分析python课程论文_python时间序列分析
  4. mysql concat 索引_mysql-查看数据库、索引、表大小
  5. Templates Algorithms
  6. linux常用文本编缉命令(strings/sed/awk/cut/uniq/sort)
  7. 2014.4.21 福州 晴 离京第一次面试(某天) 失败啊
  8. php操作mysql数据库的基本类
  9. webmin开新网站/创建虚拟服务器失败setquota: Quota file not found
  10. 如何在没有导入excel的情况下获取excel中的测试数据