`

c语言各种常见排序(直接插入排序、折半插入排序、冒泡排序、选择排序、堆排序)

 
阅读更多

001 #include <stdio.h>
002 #include <stdlib.h>
003 int main()
004 {
005 int L[11]={0,70,38,65,97,76,93,1,15,68,64}; //0不做排序只是当做哨兵,或者临时交换空间使用。
006 int i=0;
007 printf("未排序前序列:\n");
008 for(i=1;i<=10;i++)
009 {
010 printf("%d ",L[i]);
011 }
012 printf("\n-------------------------------------\n");
013 insertSort(L); //直接插入排序
014 //BInsertSort(L); //折半插入排序
015 //bubbleSort(L);//冒泡排序
016 //selectSort(L); //选择排序
017 //heapSort(L,10); //堆排序
018 printf("排序后序列:\n");
019 for(i=1;i<=10;i++)
020 {
021 printf("%d ",L[i]);
022 }
023 return 0;
024 }
025 void insertSort(int L[11])//插入排序 插入排序的最差和平均情况的性能是O(n^2)
026 {
027 int i=0,j=0;
028 for(i=2;i<=10;++i)
029 {
030 L[0]=L[i]; //监视哨
031 for(j=i-1;L[0]<L[j];--j)
032 {
033 L[j+1]=L[j]; //记录后移
034 }
035 L[j+1]=L[0];//插入记录
036 }
037 }
038 void BInsertSort(int L[11]) //折半查找排序
039 {
040 int i=0,j=0,low=0,high=0,m=0;
041 for(i=2;i<=10;++i)
042 {
043 L[0]=L[i]; //监视哨
044 low=1;high=i-1;
045 while(low<=high){
046 m=(low+high)/2; //折半
047 if(L[0]<L[m])
048 high=m-1;
049 else
050 low=m+1;
051 }
052 for(j=i-1;L[0]<L[j];--j)
053 L[j+1]=L[j]; //记录后移
054 L[high+1]=L[0]; //插入
055 }
056 }
057 void bubbleSort(int L[11]) //冒泡排序复杂度是O(n^2)
058 {
059 int i=0,j=0;
060 for(i=1;i<=10;++i)
061 {
062 for(j=1;j<=10-i;++j)
063 {
064 if(L[j]>L[j+1])
065 {
066 L[0]=L[j];
067 L[j]=L[j+1]; //用辅助空间交换两个值
068 L[j+1]=L[0];
069 }
070 }
071 }
072 }
073 void selectSort(int L[11]) //选择排序 复杂度为:O(n^2)
074 {
075 int i=0,j=0,min_idx=0;
076 for(i=1;i<=10;++i)
077 {
078 min_idx=i;
079 for(j=i+1;j<=10;++j)
080 {
081 if(L[j]<L[min_idx])
082 {
083 min_idx=j;
084 }
085 }
086 if(min_idx!=i)
087 {
088 L[0]=L[i];
089 L[i]=L[min_idx]; //交换最小值与L[i]
090 L[min_idx]=L[0];
091 }
092 }
093 }
094 void heapSort(int L[11],int n) //堆排序
095 {
096 int i=0;
097 for(i=n/2;i>0;--i)
098 heapAjust(L,i,n);
099 for(i=n;i>1;--i)
100 {
101 L[0]=L[1];
102 L[1]=L[i];
103 L[i]=L[0];
104 heapAjust(L,1,i-1);
105 }
106 }
107 void heapAjust(int L[11],int s,int m) //建大顶堆,使L[s...m]为大顶堆
108 {
109 int rc=L[s],i=0;
110 for(i=2*s;i<=m;i*=2)
111 {
112 if(i<m&&L[i]<L[i+1])
113 ++i;
114 if(rc>=L[i])
115 break;
116 L[s]=L[i];
117 s=i;
118 }
119 L[s]=rc;
120 }
分享到:
评论

相关推荐

    直接插入排序、折半排序、shell排序、冒泡排序、快速排序、选择排序、堆排序的实现

    数据结构(c语言版)严蔚敏 吴伟民编著 中直接插入排序、折半排序、shell排序、冒泡排序、快速排序、选择排序、堆排序的实现、归并排序,使用c语言实现

    直接插入、折半插入、冒泡、快速、简单选择等排序方法 用c语言实现

    直接插入、折半插入、冒泡、快速、简单选择等排序方法 用c语言实现 代码运行正常 不会有任何的问题

    各种基本内部排序算法

    直接插入排序,折半插入排序,希尔排序,快速排序,冒泡排序,直接选择排序,堆排序,归并排序大合集

    排序算法源代码(C语言实现)

    C语言实现的九种经典排序算法(直接选择排序、冒泡排序、快速排序、归并排序、直接插入排序、希尔排序、折半插入排序、堆排序、基数排序),运行稳定高效。

    内部排序算法的实现与比较-C语言

    数据结构课程设计,从折半插入排序、希尔排序、冒泡排序、快速排序、选择排序、堆排序、二路归并排序、基数排序等排序方法中选用5种,实现数据的排序。

    C的八种插入排序效率比较

    直接插入排序,折半插入排序,希尔排序,冒泡排序,一趟快速排序,快速排序,直接选择排序,堆排序相关代码及效率的比较

    (c语言排序算法)sort.c

    排序算法:直接插入、折半插入排序、希尔排序、冒泡、快排、选择排序、堆排序、归并排序算法c语言实现,带有简要的注释(并非详解)

    排序方法全集

    总结了一下比较常见的几种排序方法,用c程序实现,包括:直接插入排序,折半插入排序,希尔排序,冒泡排序,快速排序,简单选择排序,堆排序,树型排序,归并排序,分配排序,这些算法的实现都有,很全的

    数据结构采用C语言编写

    采用C语言编写,里面有查找(分块,顺序,折半,哈希查找),排序(插入排序:直接插入排序、折半插入排序、希尔排序;交换排序:冒泡排序、快速排序;选择排序:简单选择排序、堆排序;归并排序:2-路归并排序;基数...

    严蔚敏 数据结构(C语言版) 代码 23490 书中算法

    作 者:严蔚敏 李冬梅 吴伟民 出版时间:2011-2-1 0:00:00 ...8.4.2 堆排序 221 8.5 归并排序 226 8.6 基数排序 228 8.6.1 多关键字的排序 228 8.6.2 链式基数排序 228 8.7 小结 232 习题 233

    数据结构课程设计C语言版

    直接插入排序:排序并测试排序过程中的时间消耗 void StraightInsertionSort(long p[],long n) { long *q=new long[n+1]; Initiate(p,q,n); LARGE_INTEGER m_liPerfFreq={0}; QueryPerformanceFrequency(&m_...

    数据结构习题答案(全部算法)严蔚敏版

    9.4.2 堆排序 9.5 归并排序 9.6 基数排序 9.7 内部排序总结 9.8 有关排序算法的C语言源程序 9.9 多路归并用于外排序的简介 习题九 第10章 文件 10.1 文件的基本概念 10.1.1 文件 10.1.2 外存储器及信息...

    C语言通用范例开发金典.part2.rar

    范例1-89 堆排序 256 ∷相关函数:HeapSort函数 1.5.14 归并排序 258 范例1-90 归并排序 258 ∷相关函数:MergeSort函数 1.5.15 多路平衡归并排序 260 范例1-91 多路平衡归并排序 260 ∷相关函数:K_Merge...

    数据结构(王)c元代码

    范例1-89 堆排序 256 ∷相关函数:HeapSort函数 1.5.14 归并排序 258 范例1-90 归并排序 258 ∷相关函数:MergeSort函数 1.5.15 多路平衡归并排序 260 范例1-91 多路平衡归并排序 260 ∷相关函数:K_Merge函数 ...

    C语言通用范例开发金典.part1.rar

    范例1-89 堆排序 256 ∷相关函数:HeapSort函数 1.5.14 归并排序 258 范例1-90 归并排序 258 ∷相关函数:MergeSort函数 1.5.15 多路平衡归并排序 260 范例1-91 多路平衡归并排序 260 ∷相关函数:K_Merge...

    数据结构课程设计

    要求:(1)对冒泡排序、直接排序、简单选择排序、快速排序、希尔排序、堆排序算法进行比较; (2)待排序表的表长不小于100,表中数据随机产生,至少用5组不同数据作比较,比较指标有:关键字参加比较次数和关键字的...

    C/C++常用算法手册.秦姣华(有详细书签).rar

    4.7.2 堆排序算法示例 121 4.8 合并排序法 123 4.8.1 合并排序算法 123 4.8.2 合并排序算法示例 126 4.9 排序算法的效率 129 4.10 排序算法的其他应用 130 4.10.1 反序排序 130 4.10.2 字符串数组的排序 132...

    数据结构实验

    1.掌握简单插入排序、冒泡排序、快速排序、堆排序以及归并排序的算法并加以应用。 2.对各种查找、排序技术的时间、空间复杂性有进一步认识。 二 、实验要求 1.认真阅读和掌握和本实验相关的教材内容。 2.编写...

    C++大学教程,一本适合初学者的入门教材(part2)

    20.5.12 堆排序 20.5.13 min和max 20.5.14 本章未介绍的算法 20.6 bitset类 20.7 函数对象 小结 术语 自测练习 自测练习答案 练习 Internet和World Wide Web中的STL资源 STL文献 第21章 ANSI/ISO C++标准...

    C++大学教程,一本适合初学者的入门教材(part1)

    20.5.12 堆排序 20.5.13 min和max 20.5.14 本章未介绍的算法 20.6 bitset类 20.7 函数对象 小结 术语 自测练习 自测练习答案 练习 Internet和World Wide Web中的STL资源 STL文献 第21章 ANSI/ISO C++标准...

Global site tag (gtag.js) - Google Analytics