《数据结构与算法C#语言描述》笔记3_基础排序算法

三.基础排序算法

许多数据结构主要的设计目的,就是为了便于数据的有效存储、排序、查找等的处理工作。

选择排序时效率最高的(虽然三个算法遍历次数相同,但是选择排序是多次判断后赋值给或操作临时变量最终将最大最小值赋值给或操作数据数组。而其他均在多次判断后直接赋值给或操作数据数组)。

冒泡排序算法

本质:遍历从头到最后第二个,比较下个元素,较小的到左边,

多次遍历整个列,比较相邻的数值,如果左侧的数值大于右侧数值就进行交换(将较小的交换到左边)。

长度为n的数组,需要n(n-1)/2次。操作数组n(n-1)/2次。

            for(int i = a.Length-1; i >0; i--)///9,……,1

            {

                for(int j = 0; j < i; j++)///0,……,8;0,……,7;……;0

                {

                    if(a[j] > a[j + 1])///9+8+……+1

                    {

                        int swap = a[j + 1];

                        a[j + 1] = a[j];

                        a[j] = swap;

                    }

                    k++;

                }

            }

索引号遍历轨迹:

→0,1,2,3,4,5,6,7,8,9

→0,1,2,3,4,5,6,7,8

→0,1,2,3,4,5,6,7

→0,1,2,3,4,5,6

→0,1,2,3,4,5

→0,1,2,3,4

→0,1,2,3

→0,1,2

→0,1

较大的数向右移动(交换)

选择排序算法

本质:遍历从第一个到最后第二个,比较下面所有元素,找最小(大)的数放在最前(后)位

从第一个元素起比较后面的其他元素,将最小的元素放在第一个位置。再从第二个元素起重复,将后面的最小元素放在第二个位置。

长度为n的数组,需要n(n-1)/2次。操作数组n次。

            for(int i = 0; i<=a.Length-1; i++)///0,……,9

            {

                intminIndex = 0;

                for(int j = i+1; j<=a.Length-1; j++)///1,……,9;2,……,9;……;9

                {

                    if(a[j] < a[minIndex])///9+8+……+1

                    {

                        minIndex = j;

                    }                   

                    k++;

                }

                intswap = a[i];

                a[i] = a[minIndex];

                a[minIndex] = swap;

            }

索引号遍历轨迹:

→0,1,2,3,4,5,6,7,8,9

→1,2,3,4,5,6,7,8,9

→2,3,4,5,6,7,8,9

→3,4,5,6,7,8,9

→4,5,6,7,8,9

→5,6,7,8,9

→6,7,8,9

→7,8,9

→8,9

最小的数放在最前面位置

插入排序算法

本质:遍历从第二个到最后个,比较前个元素,较小的到左边,

从第二个位置起,遍历前面的元素,将较小的交换到左边。再从第三个位置起,同样操作,直到最后一个位置。

长度为n的数组,需要n(n-1)/2次。操作数组n(n-1)/2次。

            for(int i = 1; i <= a.Length - 1; i++)///1,……,9

            {

                inttemp = a[i];

                intj = i;

                while(j > 0 && a[j - 1] >= temp)///1,……,0;2,……,0;……;9,……,0;

                {

                    a[j] = a[j - 1];

                    j -= 1;

                }

                a[j] = temp;

                k += i;///9+8+……+1

            }

索引号遍历轨迹:

0,1←

0,1,2←

0,1,2,3←

0,1,2,3,4←

0,1,2,3,4,5←

0,1,2,3,4,5,6←

0,1,2,3,4,5,6,7←

0,1,2,3,4,5,6,7,8←

0,1,2,3,4,5,6,7,8,9←

较大的数向右移动(交换)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值