数据结构之排序算法

来源:互联网 发布:king最新域名 编辑:程序博客网 时间:2024/06/06 00:35

学过好久的东西,感觉都忘记的差不多了,虽然可能日常写代码的过程之中也可能写过一些算法,但是从来都没有规整,最近忙里偷闲,写点关于排序的算法,当然好多人都写过一些很不错的算法blog,我写一下,只是方便自己日后查看,当然也给有需要的朋友一些参考,欢迎指正

排序算法有:冒泡排序,选择排序,插入排序......(未完待续)

1.冒泡排序: 很明显,最下面的(或者说一个,当然如果想倒序排列,则算法反一下)依次往上比较找到最大的,放后面

(1)取第一个元素,依次与后面的比较,大的往后去,小的往前走直到最大的放在最后面

(2)取第一个元素,依次与后面的比较,与(1)一样,问题在于此时最后一个一定是最大的,因为你知道,所以第二次查找的时候就需要比较到第n-2(假设一共n个元素),这个时候应该会写一个控制吧

(3)重复上面内容,此时存在两个for循环,一个依次比较,一个控制比较到什么位置,后面的一定会是大的了

ok,一般的写法就是这样,没啥大问题,我还写(4)当然也是看的别人的

(4)假如第1个 < 第二个,第2个 < 第3个,第3个<第4个......呀,他们是本身就是有序的啊,那我们压根就不需要排序了,此时需要加一个flag 控制是否 需要新排序


上代码

/// <summary>    /// 冒泡排序    /// 取出第0个第1个,进行比较,如果a > b,则交行位置,否则继续取第1个与第2个,直到最后一个    /// 从头取第0个第1个,进行比较,如果a>b,则交换位置,否则继续取第1个与第2个,直到倒数第二个(因为最后一个一定是最大的了已经)    /// flag 标识符,确定是否当前排序已经正常    /// </summary>    void SortOutBubble()    {        int[] numberArr = { 10, 88, 21, 4, 94, 75, 324, 947 };        int i, j, flag = 1;        //如果flag = 0,则表示未排序的数字事实上已经符合排列标准了,就不需要再次遍历了        for (i = 1; i < numberArr.Length && flag == 1; i++)        {            //i=1用来控制总的遍历次数(n个元素,事实上遍历n-1次 一次取俩,所以赋值1)            flag = 0;            for (j = 0; j < numberArr.Length - i; j++)            {                if (numberArr[j] > numberArr[j + 1])                {                    int temp = numberArr[j];                    numberArr[j] = numberArr[j + 1];                    numberArr[j + 1] = temp;                    flag = 1;                }                //如果没有交换的泡泡,flag = 0说明各个顺序已经对了,不需要再次遍历            }        }        //此处可以打印log    }
未完待续

0 0