1.排序算法:
//****************************Sort.h********************************************
#ifndef SORT_H
#define SORT_H #include <stdio.h>
#include <stdlib.h>
#include <stdbool.h> //冒泡排序
void BubbleSort(int data[],int len); //简单选择排序
void SelectSort(int data[],int len); //直接插入排序
void InsertSort(int data[],int len); //希尔排序
void ShellSort(int data[],int len); //堆排序
void HeapSort(int data[],int len); //归并排序
void MergeSort(int data[],int len); //快速排序
void QuickSort(int data[],int len); #endif //SORT_H //****************************Sort.c********************************************
#include "Sort.h" void swap(int a[],int i,int j)
{
int tmp = a[i];
a[i] = a[j];
a[j] = tmp;
} //冒泡排序
void BubbleSort(int data[],int len)
{
int i,j;
bool flag;
for(i=0;i < len-1;i++)
{
flag = false;
for(j = len-1;j >i;j--)
{
if(data[j] < data[j-1])
{
swap(data,j,j-1);
} }
if(!flag) //标志位未被置位,序列已经有序
{
break;
}
}
} //简单选择排序
void SelectSort(int data[],int len)
{
int i,j,min;
for(i=0;i < len;i++)
{
min = i;
for(j=i+1;j < len;j++)
{
if(data[j] < data[min])
{
min = j;
}
}
if(min != i) {
swap(data,i,min);
}
} } //直接插入排序
void InsertSort(int data[],int len)
{
int i,j; for(i=1;i < len;i++)
{
if(data[i] < data[i-1])
{
int tmp = data[i];
for(j= i-1;j >= 0 && data[j] > tmp;j--)
{
data[j+1] = data[j];
}
data[j+1] = tmp;
} }
} //希尔排序
void ShellSort(int data[],int len)
{
int increment = len;
int i,j; do
{
increment = increment/3+1; for(i=increment+1;i < len;i++)
{
if(data[i] < data[i-increment])
{
int tmp = data[i]; for(j= i-increment;j >= 0 && data[j] > tmp ;j-=increment)
{
data[j+increment] = data[j];
}
data[j+increment] = tmp;
}
} }
while(increment>1);
} void HeapAdjust(int data[],int s,int m)
{
int i,tmp;
tmp = data[s];
for(i=2*s;i <= m;i*=2)
{
if(i<m && data[i] < data[i+1])
{
++i;
} if(tmp >= data[i])
{
break;
}
data[s] = data[i];
s = i;
}
data[s] = tmp;
} //堆排序
void HeapSort(int data[],int len)
{
int i;
for(i=len/2;i >= 0;i--)
{
HeapAdjust(data,i,len-1);
} for(i=len-1;i > 0;i--)
{
swap(data,0,i);
HeapAdjust(data,0,i-1);
}
} void Merge(int data[],int tmp[],int s,int m,int t)
{
int j,k,l; for(j=m+1,k=s;j<=t && s<=m;k++)
{
if(data[s] < data[j])
{
tmp[k] = data[s++];
}
else
{
tmp[k] = data[j++];
}
}
if(s <= m)
{
for(l=0;l <= m-s;l++)
{
tmp[k+l] = data[s+l];
}
} if(j <= t)
{
for(l=0;l <= t-j;l++)
{
tmp[k+l] = data[j+l];
}
}
} void MSort(int data[],int tmp[],int s,int t)
{
int tmp1[1000];
int m;
if(s == t)
{
tmp[s] = data[s];
}
else
{
m = (s+t)/2;
MSort(data,tmp1,s,m);
MSort(data,tmp1,m+1,t);
Merge(tmp1,tmp,s,m,t);
}
}
//归并排序
void MergeSort(int data[],int len)
{
MSort(data,data,0,len-1);
} int Partition(int data[],int low,int high)
{
int key = data[low]; while(low < high)
{
while(low<high && data[high] > key)
{
high--;
}
data[low] = data[high]; while(low <high && data[low] < key)
{
low++;
}
data[high] = data[low];
}
data[low] = key;
return low;
} void QSort(int data[],int low,int high)
{
int pivot; if(low <high)
{
pivot = Partition(data,low,high);
QSort(data,low,pivot-1);
QSort(data,pivot+1,high);
}
} //快速排序
void QuickSort(int data[],int len)
{
QSort(data,0,len-1);
} //****************************SortTest.c********************************************
#include "Sort.h" void travel(int a[],int n)
{
for(int i=0;i < n;i++)
{
printf("%d ",a[i]);
}
printf("\n");
} int main()
{
int a[] = {2,6,8,5,4,10,1,3,7,9};
travel(a,10); //冒泡排序
//BubbleSort(a,10); //简单选择排序
//SelectSort(a,10); //直接插入排序
//InsertSort(a,10); //希尔排序
//ShellSort(a,10); //堆排序
//HeapSort(a,10); //归并排序
//MergeSort(a,10); //快速排序
QuickSort(a,10);
travel(a,10);
}
x
273
 
1
//****************************Sort.h********************************************
2
#ifndef SORT_H
3
#define SORT_H
4

5
#include <stdio.h>
6
#include <stdlib.h>
7
#include <stdbool.h>
8

9
//冒泡排序
10
void BubbleSort(int data[],int len);
11

12
//简单选择排序
13
void SelectSort(int data[],int len);
14

15
//直接插入排序
16
void InsertSort(int data[],int len);
17

18
//希尔排序
19
void ShellSort(int data[],int len);
20

21
//堆排序
22
void HeapSort(int data[],int len);
23

24
//归并排序
25
void MergeSort(int data[],int len);
26

27
//快速排序
28
void QuickSort(int data[],int len);
29

30

31
#endif  //SORT_H
32

33

34
//****************************Sort.c********************************************
35
#include "Sort.h"
36

37
void swap(int a[],int i,int j)
38
{
39
    int tmp = a[i];
40
    a[i] = a[j];
41
    a[j] = tmp;
42
}
43

44
//冒泡排序
45
void BubbleSort(int data[],int len)
46
{
47
    int i,j;
48
    bool flag;
49
    for(i=0;i < len-1;i++)
50
    {
51
        flag = false;
52
        for(j = len-1;j >i;j--)
53
        {
54
            if(data[j] < data[j-1])
55
            {
56
                swap(data,j,j-1);
57
            }
58

59
        }
60
        if(!flag) //标志位未被置位,序列已经有序
61
        {
62
            break;
63
        }
64
    }
65
}
66

67
//简单选择排序
68
void SelectSort(int data[],int len)
69
{
70
    int i,j,min;
71
    for(i=0;i < len;i++)
72
    {
73
        min = i;
74
        for(j=i+1;j < len;j++)
75
        {
76
            if(data[j] < data[min])
77
            {
78
                min = j;
79
            }
80
        }
81
        if(min != i)
82
        
83
        {
84
            swap(data,i,min);
85
        }
86
    }
87

88
}
89

90
//直接插入排序
91
void InsertSort(int data[],int len)
92
{
93
    int i,j;
94

95
    for(i=1;i < len;i++)
96
    {
97
        if(data[i] < data[i-1])
98
        {
99
            int tmp = data[i];
100
            for(j= i-1;j >= 0 && data[j] > tmp;j--)
101
            {
102
                data[j+1] = data[j];
103
            }
104
            data[j+1] = tmp;
105
        }
106
    
107
    }
108
}
109

110
//希尔排序
111
void ShellSort(int data[],int len)
112
{
113
    int increment = len;
114
    int i,j;
115
    
116
    do
117
    {
118
        increment = increment/3+1;
119
        
120
        for(i=increment+1;i < len;i++)
121
        {
122
            if(data[i] < data[i-increment])
123
            {
124
                int tmp = data[i];
125
                
126
                for(j= i-increment;j >= 0 && data[j] > tmp ;j-=increment)
127
                {
128
                    data[j+increment] = data[j];
129
                }
130
                data[j+increment] = tmp;
131
            }
132
        }
133
    
134
    }
135
    while(increment>1);
136
}
137

138
void HeapAdjust(int data[],int s,int m)
139
{
140
    int i,tmp;
141
    tmp = data[s];
142
    for(i=2*s;i <= m;i*=2)
143
    {
144
        if(i<m && data[i] < data[i+1])
145
        {
146
            ++i;
147
        }
148

149
        if(tmp >= data[i])
150
        {
151
            break;
152
        }
153
        data[s] = data[i];
154
        s = i;
155
    }
156
    data[s] = tmp;
157
}
158

159

160
//堆排序
161
void HeapSort(int data[],int len)
162
{
163
    int i;
164
    for(i=len/2;i >= 0;i--)
165
    {
166
        HeapAdjust(data,i,len-1);
167
    }
168
    
169
    
170
    for(i=len-1;i > 0;i--)
171
    {
172
        swap(data,0,i);
173
        HeapAdjust(data,0,i-1);
174
    }
175
}
176

177

178
void Merge(int data[],int tmp[],int s,int m,int t)
179
{
180
    int j,k,l;
181

182
    for(j=m+1,k=s;j<=t && s<=m;k++)
183
    {
184
        if(data[s] < data[j])
185
        {
186
            tmp[k] = data[s++];
187
        }
188
        else
189
        {
190
            tmp[k] = data[j++];
191
        }
192
    }
193
    if(s <= m)
194
    {
195
        for(l=0;l <= m-s;l++)
196
        {
197
            tmp[k+l] = data[s+l];
198
        }
199
    }
200

201
    if(j <= t)
202
    {
203
        for(l=0;l <= t-j;l++)
204
        {
205
            tmp[k+l] = data[j+l];
206
        }
207
    }
208
}
209

210
void MSort(int data[],int tmp[],int s,int t)
211
{
212
    int tmp1[1000];
213
    int m;
214
    if(s == t)
215
    {
216
        tmp[s] = data[s];
217
    }
218
    else
219
    {
220
        m = (s+t)/2;
221
        MSort(data,tmp1,s,m);
222
        MSort(data,tmp1,m+1,t);
223
        Merge(tmp1,tmp,s,m,t);
224
    }
225
}
226
//归并排序
227
void MergeSort(int data[],int len)
228
{
229
    MSort(data,data,0,len-1);
230
}
231

232

233
int Partition(int data[],int low,int high)
234
{
235
    int key = data[low];
236

237
    while(low < high)
238
    {   
239
        while(low<high && data[high] > key)
240
        {
241
            high--;
242
        }
243
        data[low] = data[high];
244

245
        while(low <high && data[low] < key)
246
        {
247
            low++;
248
        }
249
        data[high] = data[low];
250
    }
251
    data[low] = key;
252
    return low;
253
}
254

255
void QSort(int data[],int low,int high)
256
{
257
    int pivot;
258

259
    if(low <high)
260
    {
261
        pivot = Partition(data,low,high);
262
        QSort(data,low,pivot-1);
263
        QSort(data,pivot+1,high);
264
    }
265
}
266

267
//快速排序
268
void QuickSort(int data[],int len)
269
{
270
    QSort(data,0,len-1);
271
}
272

273
//****************************SortTest.c********************************************
274
#include "Sort.h"
275

276
void travel(int a[],int n)
277
{
278
    for(int i=0;i < n;i++)
279
    {
280
        printf("%d ",a[i]);
281
    }
282
    printf("\n");
283
}
284

285
int main()
286
{
287
    int a[] = {2,6,8,5,4,10,1,3,7,9};
288
    travel(a,10);
289

290
    //冒泡排序
291
    //BubbleSort(a,10);
292
    
293
    //简单选择排序
294
    //SelectSort(a,10);
295

296

297
    //直接插入排序
298
    //InsertSort(a,10);
299
    
300
    //希尔排序
301
    //ShellSort(a,10);
302

303
    //堆排序
304
    //HeapSort(a,10);
305
    
306
    //归并排序
307
    //MergeSort(a,10);
308
    
309

310
    //快速排序
311
    QuickSort(a,10);
312
    travel(a,10);
313
}

附件列表

Chapter 9 (排序)的更多相关文章

  1. Chapter 6 排序

    Chapter 6 排序 1-   直接插入排序 O(n2) O(1) 2-   折半插入排序 O(n2) O(1) 适合关键字较多 3-   希尔排序O(nlogn) O(1) 又名,缩小增量排序 ...

  2. 《算法导论》 — Chapter 7 高速排序

    序 高速排序(QuickSort)也是一种排序算法,对包括n个数组的输入数组.最坏情况执行时间为O(n^2). 尽管这个最坏情况执行时间比較差.可是高速排序一般是用于排序的最佳有用选择.这是由于其平均 ...

  3. MySQL Crash Course #03# Chapter 5. 6 排序. BETWEEN. IS NULL

    索引 排序检索的数据 SQL 过滤 vs. 应用程序过滤 简单 Where 补充:大小写敏感. BETWEEN. IS NULL Sorting Retrieved Data mysql> SE ...

  4. 《算法导论》 — Chapter 8 线性时间排序

    序 到目前为止,关于排序的问题,前面已经介绍了很多,从插入排序.合并排序.堆排序以及快速排序,每一种都有其适用的情况,在时间和空间复杂度上各有优势.它们都有一个相同的特点,以上所有排序的结果序列,各个 ...

  5. Chapter 5. Label and Entry Widgets 标签和输入部件

    Chapter 5. Label and Entry Widgets  标签和输入部件 有时候,你需要用户输入特定的信息,比如他们的名字,地址或者 甚至序号. 简单的方式来实现这个是使用Enry 部件 ...

  6. 利用ArrayList对Hashtable其进行排序

    前言: 最近在使用Hashtable的时候发现一个问题:就是当你对Hashtable进行遍历的时候整个输出结果是毫无顺序的, 上网查了一下说是Hashtable有自己内部的排序机制,如果要自定义排序的 ...

  7. Chapter 1 Securing Your Server and Network(8):停止未使用的服务

    原文:Chapter 1 Securing Your Server and Network(8):停止未使用的服务 原文出处:http://blog.csdn.net/dba_huangzj/arti ...

  8. MVC 5 的 EF6 Code First 入门 系列:排序、筛选和分页

    这是微软官方SignalR 2.0教程Getting Started with Entity Framework 6 Code First using MVC 5 系列的翻译,这里是第三篇:排序.筛选 ...

  9. Java温故而知新-冒泡法排序

    冒泡法排序是各种初学者在学习数组与循环结构时都会练习的一种简单排序算法. 冒泡法的精髓在于比较相邻的两个元素,较大的元素会不断的排到队伍后面去,就像水里的泡泡一样不断向上跑. 想像一下倒在一个透明玻璃 ...

随机推荐

  1. HW 2017 12 17可禾大佬神题

    好不容易搞来的题目,不写一写怎么行呢. 不过难度真心不高(一小时K掉),都是老题+暴力题,没有欧洲玄学. 再说一句,这试卷是叶可禾出的吧. T1 好老的题目,看到有多组数据我还怕了,以为有更流弊的算法 ...

  2. winform和wpf如何实现鼠标穿透的效果

    先看一下鼠标穿透的效果: 可以看到Form1这个程序虽然遮在了桌面的上面,但是我们还可以在窗体上点击桌面上的必应词典和网易邮箱大师,好像这个叫“Form1”的窗口被“穿透”一样. winform版本: ...

  3. react脚手架改造(react/react-router/redux/eslint/karam/immutable/es6/webpack/Redux DevTools)

    公司突然组织需要重新搭建一个基于node的论坛系统,前端采用react,上网找了一些脚手架,或多或少不能满足自己的需求,最终在基于YeoMan的react脚手架generator-react-webp ...

  4. android 一些常用的功能方法代码块

    我们这些苦逼的程序员在工作中,每一个老板都希望我们都能把手头的工作做好的,而且是越快越好,那我们要怎么样才能快起来呢?对于开发中常用的代码块无限复做是我们工作中简省时间最有效的途径之一,而下面的这些代 ...

  5. Java设计模式之适配器设计模式(项目升级案例)

    今天是我学习到Java设计模式中的第三个设计模式了,但是天气又开始变得狂热起来,对于我这个凉爽惯了的青藏人来说,又是非常闹心的一件事儿,好了不管怎么样,目标还是目标(争取把23种Java设计模式接触一 ...

  6. (转载)利用SIFT和RANSAC算法(openCV框架)实现物体的检测与定位,并求出变换矩阵(findFundamentalMat和findHomography的比较) 置顶

    原文链接:https://blog.csdn.net/qq_25352981/article/details/46914837#commentsedit 本文目标是通过使用SIFT和RANSAC算法, ...

  7. Unity利用SMSSDK实现短信验证码(附代码)

    最近一直在研究如何给app更多实用性的功能,在app进行登录或者注册时,为了方便用户更加快捷的完成登录功能,所以就决定采用短信验证码的方式进行验证登录.在学习的过程中,先使用了Mob的短信服务进行短信 ...

  8. HyperLedger/Fabric JAVA-SDK with 1.1

    HyperLedger/Fabric JAVA-SDK with 1.1 该项目可直接在github上访问. 该项目介绍如何使用fabric-sdk-java框架,基于fabric-sdk-java ...

  9. [咸恩静][Real Love]

    歌词来源:http://music.163.com/#/song?id=484056972 作曲 : Andrew 崔/Brian Cho/220 [作曲 : Andrew 崔/Brian Cho/2 ...

  10. Daily Scrumming* 2015.12.12(Day 4)

    一.团队scrum meeting照片 二.今日总结 姓名 WorkItem ID 工作内容 签入链接以及备注说明  江昊 任务1036 进行界面开发,明日准备开发第一个界面,社团展示界面 工作暂未完 ...