前言

排序算法在数据结构里属于最为重要的一部分,例如我们熟悉的冒泡、选择、插入、归并等,这些当初在第一次学习的时候,并没有很好的掌握,现在因为在备战考研,刚刚进行完数据结构的一轮简单复习在开始整理一轮比较重要的代码,于是从第八章开始整理7种重要的排序–冒泡、选择、希尔排序、插入、归并、堆排序。

冒泡

void BubbleSort1(int *arr,int len)
{int i,j;bool flag=false;//这个是从后面亡前面冒for(i=0;i<len;i++)//n-1趟{for(j=len-1;j>0;j--){if(arr[j]<arr[j-1])//如果后面元素更小,冒上去{swap(&arr[j],&arr[j-1]);flag=true;}}if(flag==false){return;}}
}

冒泡排序–从前面往后泡

void BubbleSort2(int *arr,int len)
{int i,j;for(i=0;i<len-1;i++){for(j=0;j<len-1-i;j++){if(arr[j]>arr[j+1]){swap(&arr[j],&arr[j+1]);}}}
}

插入排序

void InsertSort(int *arr,int len)
{int i,j;int tmp;for(i=1;i<len;i++){tmp=arr[i];for(j=i-1;j>=0&&arr[j]>tmp;j--){arr[j+1]=arr[j];}arr[j+1]=tmp;}
}

选择排序

void ChooseSort(int *arr,int len)
{int i,j,min;for(i=0;i<len-1;i++){min=i;for(j=i+1;j<len;j++){if(arr[j]<arr[min]){min=j;}}if(min!=i){swap(&arr[i],&arr[min]);}}
}

希尔排序

void ShellSort(int *arr,int len)
{int i,j,dk;int tmp;for(dk=len/2;dk>=1;dk=dk/2){for(i=dk+1;i<len;i+=1){tmp=arr[i];for(j=i-dk;j>=0&&arr[j]>tmp;j-=dk){arr[j+dk]=arr[j];}arr[j+dk]=tmp;}}
}

快速排序

int GetPortion(int *arr,int low,int high)
{int Portion=arr[low];while (low<high){while (low<high&&arr[high]>=Portion)high--;//往前搜索arr[low]=arr[high];while (low<high&&arr[low]<=Portion)low++;//向后搜索arr[high]=arr[low];//比标记大的放后面}arr[low]=Portion;return low;
}
void QuickSort(int *arr,int low,int len)
{int Position= GetPortion(arr,low,len);if(low<len){QuickSort(arr,low,Position-1);QuickSort(arr,Position+1,len);}
}

堆排序

void BuildMax(int *arr,int start,int end)
{int dad=start;int son=2*dad+1;while (son<=end){if(son+1<=end&&arr[son]<arr[son+1]){son++;}else if(arr[dad]>arr[son]){return;} else{swap(&arr[dad],&arr[son]);dad=son;son=2*dad+1;}}
}
void HeapSort(int *arr,int len)
{int i;for(i=len/2-1;i>=0;i--)//从len/2-1到0{BuildMax(arr,i,len-1);//调用构建大根堆的函数}
}

归并排序

void Merge(int *arr,int low,int mid,int len)
{int *A=(int *) malloc(sizeof(int )*(len+1));int i,j,k;for(i=low;i<=len;i++){A[i]=arr[i];//将arr的元素复制到A中}for(i=low,j=mid+1,k=i;i<=mid&&j<=len;k+=1){if(A[i]<=A[j]){arr[k]=A[i++];} elsearr[k]=A[j++];}while (i<=mid)arr[k++]=A[i++];while (j<=len)arr[k++]=A[j++];//后面还没处理好的元素
}
void MergeSort(int *arr,int low,int len)
{if(low<len){int mid=(low+len)/2;MergeSort(arr,low,mid);MergeSort(arr,mid+1,len);Merge(arr,low,mid,len);//合并在一起}
}

将所有代码合并在一起(C语言完成)

#include <stdio.h>
#include <string.h>
#include <stdbool.h>
#include <stdlib.h>
//本项目将总结所有考研重要的排序算法
void Menu_Show()
{printf("********Choose The way about Sorting*********\n");printf("************************\n");printf("1、BubbleSort1\n");printf("2、BubbleSort2\n");printf("3、InsertSort\n");printf("4、ChooseSort\n");printf("5、ShellSort\n");printf("6、QuickSort\n");printf("7、HeapSort\n");printf("8、MergeSort\n");printf("************************\n");
}
void swap(int *a,int *b)
{int tmp=*a;*a=*b;*b=tmp;
}
int Str_Change_To_Number(char *str)
{if(strcmp(str,"BubbleSort1")==0){return 1;}else if(strcmp(str,"BubbleSort2")==0){return 2;}else if(strcmp(str,"InsertSort")==0){return 3;}else if(strcmp(str,"ChooseSort")==0){return 4;}else if(strcmp(str,"ShellSort")==0){return 5;}else if(strcmp(str,"QuickSort")==0){return 6;}else if(strcmp(str,"HeapSort")==0){return 7;}else if(strcmp(str,"MergeSort")==0){return 8;}else{return -1;}
}
void BubbleSort1(int *arr,int len)
{int i,j;bool flag=false;for(i=0;i<len;i++)//n-1趟{for(j=len-1;j>0;j--){if(arr[j]<arr[j-1])//如果后面元素更小,冒上去{swap(&arr[j],&arr[j-1]);flag=true;}}if(flag==false){return;}}
}
void BubbleSort2(int *arr,int len)
{int i,j;for(i=0;i<len-1;i++){for(j=0;j<len-1-i;j++){if(arr[j]>arr[j+1]){swap(&arr[j],&arr[j+1]);}}}
}
void InsertSort(int *arr,int len)
{int i,j;int tmp;for(i=1;i<len;i++){tmp=arr[i];for(j=i-1;j>=0&&arr[j]>tmp;j--){arr[j+1]=arr[j];}arr[j+1]=tmp;}
}
void ChooseSort(int *arr,int len)
{int i,j,min;for(i=0;i<len-1;i++){min=i;for(j=i+1;j<len;j++){if(arr[j]<arr[min]){min=j;}}if(min!=i){swap(&arr[i],&arr[min]);}}
}
void ShellSort(int *arr,int len)
{int i,j,dk;int tmp;for(dk=len/2;dk>=1;dk=dk/2){for(i=dk+1;i<len;i+=1){tmp=arr[i];for(j=i-dk;j>=0&&arr[j]>tmp;j-=dk){arr[j+dk]=arr[j];}arr[j+dk]=tmp;}}
}
int GetPortion(int *arr,int low,int high)
{int Portion=arr[low];while (low<high){while (low<high&&arr[high]>=Portion)high--;//往前搜索arr[low]=arr[high];while (low<high&&arr[low]<=Portion)low++;//向后搜索arr[high]=arr[low];//比标记大的放后面}arr[low]=Portion;return low;
}
void QuickSort(int *arr,int low,int len)
{int Position= GetPortion(arr,low,len);if(low<len){QuickSort(arr,low,Position-1);QuickSort(arr,Position+1,len);}
}
void BuildMax(int *arr,int start,int end)
{int dad=start;int son=2*dad+1;while (son<=end){if(son+1<=end&&arr[son]<arr[son+1]){son++;}else if(arr[dad]>arr[son]){return;} else{swap(&arr[dad],&arr[son]);dad=son;son=2*dad+1;}}
}
void HeapSort(int *arr,int len)
{int i;for(i=len/2-1;i>=0;i--)//从len/2-1到1{BuildMax(arr,i,len-1);}
}
void Merge(int *arr,int low,int mid,int len)
{int *A=(int *) malloc(sizeof(int )*(len+1));int i,j,k;for(i=low;i<=len;i++){A[i]=arr[i];//将arr的元素复制到A中}for(i=low,j=mid+1,k=i;i<=mid&&j<=len;k+=1){if(A[i]<=A[j]){arr[k]=A[i++];} elsearr[k]=A[j++];}while (i<=mid)arr[k++]=A[i++];while (j<=len)arr[k++]=A[j++];//后面还没处理好的元素}
void MergeSort(int *arr,int low,int len)
{if(low<len){int mid=(low+len)/2;MergeSort(arr,low,mid);MergeSort(arr,mid+1,len);Merge(arr,low,mid,len);//合并在一起}
}
void Show(int *arr,int len)
{for (int i = 0; i <len; ++i) {printf("%d ",arr[i]);}
}
int main()
{int arr[]={1,51,67,99,134,78,990,69,56,123};//1 51 56 67 69 78 99 123 134 990int len= sizeof(arr)/ sizeof(int );Menu_Show();char str[100];gets(str);int Index= Str_Change_To_Number(str);switch (Index) {case 1:BubbleSort1(arr,len);break;case 2:BubbleSort2(arr,len);break;case 3:InsertSort(arr,len);break;case 4:ChooseSort(arr,len);break;case 5:ShellSort(arr,len);break;case 6:QuickSort(arr,0,len-1);break;case 7:HeapSort(arr,len);//每个case后都要要break,否则原来的堆排序会被归并排序的结果覆盖break;case 8:MergeSort(arr,0,len-1);break;default:printf("Not exist the way of sorting--立即推--放弃考研");exit(0);}Show(arr,len);
}

数据结构常用的七种排序算法总结相关推荐

  1. java 算法 排序算法_Java七种排序算法以及实现

    Java常见七种排序算法以及实现 最近学习一些排序算法,怕自己以后忘记就打算整理起来供自己复习 萌新一枚学习Java没多久,以下仅供参考.如有错误希望大佬指正,欢迎大家在评论区交流探讨. 1.冒泡排序 ...

  2. java中常用的几种排序算法--常见笔试面试

    转载:http://blog.csdn.net/ygc87/article/details/7208082 以下列出Java中常用的几种排序算法,只是简单实现了排序的功能,还有待改进,望指教(以下均假 ...

  3. 七种排序算法(C++)

    排序算法 引言 冒泡排序 简单选择排序 直接插入排序 希尔排序 堆排序 归并排序 快速排序 引言 排序中主要包含数据元素的比较和交换,本文以C++实现以下七种排序算法,以从小到大排序为例. 如有错误, ...

  4. php常用的四种排序算法

    纯当练习,高手请绕过.以一维数组为例. 1.插入排序 思想: 每次将一个待排序的数据元素插入到前面已经排好序的数列中,使数列依然有序,知道待排序数据元素全部插入完为止. 示例: [初始关键字] [49 ...

  5. Java常用的八种排序算法与代码实现

    在Java的时候,对于排序的应用需要熟练的掌握,这样才能够确保Java学习时候能够有扎实的基础能力.那Java有哪些排序算法呢?本文小千就来详细说说Java经典的8种排序算法. 经典的排序算法有八种, ...

  6. 数据结构(三) 用java实现七种排序算法。

    很多时候,听别人在讨论快速排序,选择排序,冒泡排序等,都觉得很牛逼,心想,卧槽,排序也分那么多种,就觉得别人很牛逼呀,其实不然,当我们自己去了解学习后发现,并没有想象中那么难,今天就一起总结一下各种排 ...

  7. 【数据结构】用java实现不同的七种排序算法和性能比较

    文章目录 1.直接插入排序 2.希尔排序 3.冒泡排序 4.快速排序 5.选择排序 6.堆排序 7.归并排序 1.直接插入排序 public class DifferentSort {public s ...

  8. Python实现经典七种排序算法

    #2018-06-02 June Saturday the 22 week, the 153 day SZ #数组排序算法大全用Python3实现 #参考https://www.cnblogs.com ...

  9. java常见排序算法有哪些_Java中常用的6种排序算法详细分解

    排序算法很多地方都会用到,近期又重新看了一遍算法,并自己简单地实现了一遍,特此记录下来,为以后复习留点材料. 废话不多说,下面逐一看看经典的排序算法: 1. 选择排序 选择排序的基本思想是遍历数组的过 ...

最新文章

  1. 数据结构和算法:(1)数据结构的基本知识
  2. Myeclipse学习总结(5)——Myeclipse常用快捷键再学习
  3. c++读取文件内容并保存到二维数组
  4. 膨胀的计算机仿真,制冷空调中的计算机仿真与控制
  5. Flask的Debug功能非常酷
  6. Linux-Android启动之Init进程前传
  7. 编程入门python java和c语言_学习编程适不适合从Python入门?哪种语言更适合入门?...
  8. 华为云联合HarmonyOS发布智联生活行业加速器
  9. 手游项目初期的一些想法
  10. Spark学习笔记——构建基于Spark的推荐引擎
  11. visa虚拟卡生成器_虚拟信用卡,额度6万!无需面签即可办理
  12. 蓝桥杯 模块 低压音频功率放大器LM386
  13. 张尚老师  一位把心理学融入每一堂课程的实战教练式管理专家。学员追捧的大哥哥老师~
  14. 博弈论战略式表述和扩展式表述
  15. 百度搜索结果页面的参数 搜索历史记录(rsv_sug)
  16. 5.1 Runner构建优化
  17. Android 操作系统的进程回收机制
  18. win10清理c盘_只需十步,C盘轻松腾出30G!使用win10自带工具清理系统垃圾,让电脑重获新生...
  19. LeetCode 1905. 统计子岛屿
  20. Win10 更新最新系统 想恢复Win10系统为出厂设置 重置Win10系统时提示“找不到恢复环境”

热门文章

  1. 搭建自己的小程序服务器
  2. Java程序设计 多线程 基础知识题
  3. 【RC延迟电路 RC充电电路】 multisim 14.0仿真 参数计算
  4. 安装部署docker
  5. 计算机组成原理复习提纲六(CPU结构和功能)
  6. STM8S---IO复用配置(STVP方式)
  7. mac用什么写python程序_macos,python_大家在mac系统都用什么编辑器写python程序?,macos,python - phpStudy...
  8. JAVA编写单例(Singleton)模式
  9. EchartsY轴刻度自适应
  10. Servlet - Sessions and Cookies