20110908 sort

Posted on 2011-09-08 17:44  lesson1  阅读(177)  评论(0)    收藏  举报

  今天师兄分配给我们的工作,是让我们完成三个排序算法,分别是冒泡,选择和快速排序,还有完成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分。

博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3