排序算法的一些总结

来源:互联网 发布:js backgroundcolor 编辑:程序博客网 时间:2024/05/18 15:07


 

 

 

 

 

算法其实就是根据一组输入经过一系列的转化,得到一组输出数据,这组数据是我们想要的

 

算法中最常用的,也是最变化莫测的是排序算法。排序算法归结起来也就那几种。但是有的时候根据排序的需求会衍生出很多新的算法

我们写算法也就是为了达到某一目的根据已知算法改变成我们需求的算法

 

排序算法的几个要点:

1,比较,既然排序肯定要有一个顺序,而造成这一个顺序的前后的依据就是比较。

比较有很多种,我们为了完成算法可以把比较和真正的排序算法关系归纳一下:

比较和算法分离:  这种情况下算法是算法,比较只是算法中的一个小插曲,是决定先后顺序的一个依据,整体过程还是依据算法的,相当于他们两个是分离的

比较和算法同步: 这种情况下算法是和比较同步的,也就是算法过程要穿插比较,比较式算法的一部分

 

因此比较是我们算法中不可或缺的一部分,我们在考虑一个排序算法之前首先要考虑的是比较。有了比较无论是和算法分离或者独立,抑或其他另类算法,都可以进行排序,而且很方便的进行排序,当然我所说的这种另类排序算法我就写过一个:

不需要比较的排序算法往往需要技巧!

前几天同学让我给他写一个程序题:其中有100000个字符排序,重复的要列出来,这种情况下我想了一个算法,虽然另类但是一定程度上还是有比较的,但是这种比较就显现的不是太明显:

 

#define MAXLEN 10000void sortByChar(char arr[]){int i;char sortArr[128] = {0};for(i = 0 ;i < MAXLEN ; i ++)sortArr[arr[i]] ++;for(i = 0 ;i < 128 ;i ++)while(sortArr[i]){printf("%d  ",i);sortArr[i] --;}}


当然只要是技巧性的算法肯定有局限性。也就是不通用

 

2,严谨,算法的设计过程中,首先要把握算法的严谨性。这算是一个比较的重要因素。往往一个算法的本质代码不算太长,但是考虑的方便比较多。我们要求对排序数据进行一个全集的排序,也要求对数据的比较进行全集的比较

 

特别是快速排序,插入排序的一些排序算法首尾和临界值值得我们注意

 

3,思想。一个算法是一个对数据加工的工程,我们的结果是,一个输入,一个黑盒加工,然后一个输出

 本质上一个算法就像硬件中的 单输入,单输出的逻辑器件。只是这个输入和输出时一个数据结构,这个数据结构根据我们的意愿变化

 

这个黑盒中的具体加工操作就是我们要完成算法的思想,说起来思想,就是我们从输入到输出的一种目的倾向。

当我们看到一个算法设计题的时候,不是想着怎么设计巧妙,而是我第一反应就是以一种最通俗的算法把整个过程实现

然后就是对数据和技巧的分析,根据具体情况对CPU,内存,等进行优化,同时也是对算法本身的优化

 

 

 

 

原创粉丝点击