今天师兄分配给我们的工作,是让我们完成三个排序算法,分别是冒泡,选择和快速排序,还有完成makefile。
在上午先熟悉了下makefile,因为以前有接触过,而且基础的makefile也不是很难,所以很快就上手了。先把程序的框架搭建起来,然后开始写makefile,一开始还很顺利,但是在写链接指令的时候出了个问题,花了比较长的时间,就是用 ld 命令来链接obj文件的时候,如果有用到标注库,需要指定标准库的路径。而直接用GCC链接则不需要,因为GCC有他自己默认的链接脚本。
Makefile:
CC = gcc
OBJS = main.o display.o sort.o
OUTPUT = sort.out
.PHONY : clean everything all realclean
everything : $(OUTPUT)
all :
realclean everything
clean :
rm -f $(OBJS)
realclean :
rm -f $(OBJS) $(OUTPUT)
$(OUTPUT) : $(OBJS)
$(CC) -o $(OUTPUT) $(OBJS)
main.o : main.c display.h sort.h
$(CC) -c $< -o $@
display.o : display.c
$(CC) -c $< -o $@
sort.o : sort.c
$(CC) -c $< -o $@
冒泡排序:
void bubbing_sort(int *ary, int n)
{
int i, j, tmp;
for(i = 0; i < n - 1; ++i)
{
for(j = 0; j < n - 1; ++j)
{
if(ary[j] > ary[j + 1])
{
tmp = ary[j + 1];
ary[j + 1] = ary[j];
ary[j] = tmp;
}
}
}
}
选择排序:
void select_sort(int *ary, int n)
{
int i, j, min, tmp;
for(i = 0; i < n - 1; ++i)
{
min = i;
for(j = i + 1; j < n; ++j)
{
if(ary[min] > ary[j])
{
min = j;
}
}
tmp = ary[i];
ary[i] = ary[min];
ary[min] = tmp;
}
}
快速排序:
void qsort(int *ary, int first, int end)
{
int i = first, j = end, key = ary[first];
while(i < j)
{
while(i < j && ary[j] >= key)
j--;
ary[i] = ary[j];
while(i < j && ary[i] <= key)
i++;
ary[j] = ary[i];
}
ary[i] = key;
if(first < i-1)
qsort(ary, first, i-1);
if(end > i+1)
qsort(ary, i+1, end);
}
可以进行程序的编译之后,开始编写那三个算法,前面两个还好,容易写,但后面那个知道其思想,但没写出来,脑子里面浆糊般,很乱,应该是中午没睡到觉的原因,今晚回去好好写写。对今天的工作感觉一般般吧,给自己打个70分。
浙公网安备 33010602011771号