智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 5220|回复: 15
打印 上一主题 下一主题

算法基础部分-C语言表示

  [复制链接]

11

主题

54

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1434
威望
572
贡献
432
兑换币
0
注册时间
2011-3-1
在线时间
215 小时
跳转到指定楼层
1#
发表于 2011-6-3 13:12:30 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

C基础算法(个人整理版)

2011年5月,与WC和蓝总同去图书馆,突有此念头,故进行问题搜集并编写整理如下。部分代码参考或部分节选于网友程序。此为20个比较基础的,在各类C教程后习题中常见到的,后续将补充相关专业算法。

    2011年5月,SeptStringS!



1,           两个值互换的问题

2,           计算某年是不是闰年


3,           冒泡法排序

4,           选择排序法

5,           插入排序法

6,           快速排序法

这个好难……弄了好久……不断修改……还是出问题了,后来参考了网上的一个程序……大体思想是,拿一个数作为基准,分别从右到左和从左到右进行扫描(假定从小到大排列),那么比基准小的就移动到基准的位置上,比基准大的,就移到先前操作空出来的右侧的位子上……额,这个说的有点乱,下面是程序,添加了许多辅助语句,直接运行分析已经很直观了!!就不多写了,免得自己也纠结了。

#include "stdio.h"

//实现从小到大排序

int Partition(int r[],int i,int j)

{

         int pivot,m;

         pivot = r; //把区间第一个数作为比较的基准

         printf("\n本次操作区间[=,=]\n",i,j);

         while(i < j)

         {

                   ///////////////////////

                   //从区间两端交替向中间扫描,直至i=j为止

                   while(i < j&&r[j] >= pivot)

                   {

                            j--; //如果没有找到比r小的数,那么一直减小j,向左扫描

                   }

                   if(i < j)

                   {

                            r = r[j];//这里交换找到的第一个比r小的数

                            i++;

                   }

                   ///////////////////////

                   //输出向左扫描换数操作后的数组当前值

                   printf("由右向左扫描一次:\n");

                   for(m = 0;m < 8;m++)

                   {

                            printf("}",r[m]);

                   }

                   printf("��",i,j);

                   printf("\n");

                   ///////////////////////

                   while(i < j&&r <= pivot)

                   {

                            i++;//如果没有找到比r大的数,那么一直增大i,向右扫描

                   }

                   if(i < j)

                   {

                            r[j] = r; //这里交换找到的第一个比r大的数

                            j--;

                   }

                   ///////////////////////

                   //输出向右扫描换数操作后的数组当前值

                   printf("由左向右扫描一次:\n");

                   for(m = 0;m < 8;m++)

                   {

                            printf("}",r[m]);

                   }

                   printf("��",i,j);

                   printf("\n");

         } //endwhile

         r = pivot; //将基准值移动到当前所指数组位,以保证交换后不遗漏  

         return i;//返回推进后的i值,作为下次分区间的标准

}

void QuickSort(int r[],int low,int high)

{

         int pivotpos; //把区间分成两部分,pivotpos是左区间和右区间的分割位

         if(low < high)//保证区间存在,也就是区间长度大于1时候才进行排序操作

         {

                   pivotpos = Partition(r,low,high); //这是划分区间并移动数据的操作

                   QuickSort(r,low,pivotpos - 1);//对左区间递归排序

                   QuickSort(r,pivotpos + 1,high);//对右区间递归排序

         }

}

main()//这一部分没有什么难度,就是数组输出和子函数调用

{

         int a[8]={32,13,53,6,45,87,54,23},i;

         ///////////////////////

         printf("初始数据\n");

         printf("   a[0]   a[1]   a[2]   a[3]   a[4]   a[5]   a[6]   a[7]\n");

         for(i = 0;i < 8;i++)

         {

                   printf("}",a);

         }

         printf("       i      j");

         printf("\n");

         printf("\n");

         ///////////////////////

         QuickSort(a,0,7);

         ///////////////////////

         printf("结果数据\n");

         for(i = 0;i < 8;i++)

         {

                   printf("}",a);

         }

         printf("\n");

         ///////////////////////

}

7,           字符串排序


下面省略,放在附件

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

0

主题

20

帖子

0

精华

注册会员

Rank: 2

积分
163
威望
121
贡献
34
兑换币
3
注册时间
2012-9-1
在线时间
4 小时
16#
发表于 2013-3-28 22:26:20 | 只看该作者
感谢楼主的无私分享啊  
回复 支持 反对

使用道具 举报

0

主题

19

帖子

0

精华

高级会员

Rank: 4

积分
749
威望
378
贡献
233
兑换币
254
注册时间
2013-1-23
在线时间
69 小时
毕业学校
浙江万里学院
15#
发表于 2013-3-12 10:43:21 | 只看该作者
回复 支持 反对

使用道具 举报

7

主题

404

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1477
威望
626
贡献
623
兑换币
309
注册时间
2013-3-8
在线时间
114 小时
14#
发表于 2013-3-12 10:42:09 | 只看该作者
回复 支持 反对

使用道具 举报

17

主题

359

帖子

0

精华

跨届大侠

Rank: 10Rank: 10Rank: 10

积分
6265
威望
3889
贡献
1636
兑换币
639
注册时间
2012-9-17
在线时间
370 小时
13#
发表于 2013-3-11 19:47:43 | 只看该作者
看看
回复 支持 反对

使用道具 举报

3

主题

34

帖子

0

精华

高级会员

Rank: 4

积分
676
威望
368
贡献
180
兑换币
167
注册时间
2012-8-31
在线时间
64 小时
毕业学校
厦门大学
12#
发表于 2013-3-8 12:40:40 | 只看该作者
谢了
回复 支持 反对

使用道具 举报

1

主题

4

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
373
QQ
威望
377
贡献
86
兑换币
0
注册时间
2011-7-7
在线时间
18 小时
11#
发表于 2012-4-23 23:42:26 | 只看该作者
打不开
回复 支持 反对

使用道具 举报

40

主题

489

帖子

0

精华

跨届大侠

我很水

Rank: 10Rank: 10Rank: 10

积分
10739

优秀会员奖章活跃会员奖章论坛元老奖章资源大师奖章

QQ
威望
3117
贡献
7282
兑换币
5
注册时间
2010-10-20
在线时间
170 小时
10#
发表于 2012-4-10 20:39:41 | 只看该作者
这种东西都发     服了
回复 支持 反对

使用道具 举报

5

主题

167

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
4628
威望
879
贡献
225
兑换币
100
注册时间
2012-2-18
在线时间
3930 小时
毕业学校
神马
9#
发表于 2012-3-10 11:14:34 | 只看该作者
回复 支持 反对

使用道具 举报

1

主题

48

帖子

0

精华

高级会员

Rank: 4

积分
639
威望
387
贡献
106
兑换币
25
注册时间
2012-2-6
在线时间
73 小时
毕业学校
hitwh
8#
发表于 2012-3-10 08:04:12 | 只看该作者
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-12-27 16:25 , Processed in 0.083232 second(s), 39 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表