C 中到目前为止我所接触到的排序方式有三种 :冒泡,选择,插入
这三种排序都可以对一串数字进行由小到大的排列,
冒泡:首先比较第一个数字和第二个数字的大小 , 如果第一个数字大于第二个数字便交换两个数字的位置,然后继续比较第二个数字和第三个数字的大小,同理,如果第二个数字大于第三个数字便交换二者的位置,反之则不改变位置,依次进行内推。
如果有一个 序列
67 89 82 100 75
首先比较第一个数 67 和第二个数 89 的大小,因为 67 < 89 所以二者的位置不用交换
67 89 82 100 75
进而我们比教第二个数与第三个数的大小, 89 > 82 所以需要交换二者的位置
67 82 89 100 75
继续比较第三个数和第四个数的大小,89 < 100 所以不用交换一开始两个数字的位置
67 82 89 100 75
最后比较第第四个数字和第五个数字的大小,100 > 75 所以进行交换
67 82 89 75 100
不难发现经过序列排列后的的序列仍然没有规则的排序,所以我们需要进行循环,实际上,冒泡排列原序列中各个数字的位置不一定对,但是最后一位一定是最大的那个数字,实际上,每进行一次冒泡排列,我们都可以确定的是最大的那个数字,所以,如果一个序列有 n 个数我们需要用
n - 1 次来寻找第 2 个位置到第 n 个位置所应该进入的数字,而当我们排列好第 2 个数到第 n 个数后,只剩下最后一个数排掉第 1 个位置上,所以,n 个数所需要的冒泡排列使用的次数应该为 n - 1 。
选择: 在一个序列里面去找最小的值,然后将最小的值找出来,把他与第一个数交换位置,而后将第一个数也就是最小的那个数暂时移除原有的序列,然后找出其中第二个最小的值,并将最小的值与第二个值的位置进行交换,以此内推。所以,选择排列的实质实际上就是将一个序列的最小值一个个找出并依次赋值给第一个,第二个,第三个.......第 n 个。
例如
序列:
67 89 82 100 75
首先我们找到最小的数值:67 ,但是他本身就是第一个数字,所以我们并不需要做任何处理。
67 89 82 100 75
之后,我们在除去第一个数的序列里继续寻找最小的数,75 ,所以我们需要将他放在第二位上,但是因为第二位本身就有一个数,所以我们需要将第二位上的数改成 75 ,然后将 75 所对应位次上的数改成原本第二位上的数
67 75 82 100 89
同理,我们接着找最小的数,82,将其改成第三位上的数
67 75 82 100 89
接着找最小的数,89
67 75 82 89 100
可以发现,如果有 n 个数,那么排列的次数为 n - 1
插入:插入排列实际上是从第二个数开始依次将每一个数插入到他所应该在的正确的位置上,
如;
67 89 82 100 75
首先对第二个数字进行排列 89 > 67 ,所以,89 不用移动
67 89 82 100 75
其次,我们对第三个数进行排列,因为 82 < 89 所以我们首先交换 二者的位置,然后因为 82 > 67 所以不用进行移动
67 82 89 100 75
同理,我们紧接着判断第四位数字,因为 100 > 89 所以一百的位置不用进行更改
67 82 89 100 75
最后我们对第五位数字进行判断,因为 67 < 75 < 82 所以将 75 插入到 67 和 82 中间
67 75 82 89 100
以上,是三排列方式的原理和方法。