1.选择排序
思想:在需要进行排序的序列中,每次把最小(或最大)的交换到最左边的位置
案例:
待排序数组: 5 2 6 8 4 1
选择过程: 5 2 6 8 4 1 => 2 5 6 8 4 1 => 1 5 6 8 4 2 => 1 4 6 8 5 2 => 1 2 6 8 5 4 => 1 2 5 8 6 4 => 1 2 4 8 6 5...
2.冒泡排序
思想:在需要进行排序的序列中,分为未排好序的(左部分)和排好序的(右部分),每次把未排序的最后一个数推到排好序的相应位
置,因为其过程像气泡一样往上冒,故称为冒泡排序算法。
案例:
待排序数组: 2 5 6 8 4
选择过程:
2 5 6 8 4 => 5 2 6 8 4 => 5 6 2 8 4 => 5 6 8 2 4 => 5 6 8 4 | 2 => 5 6 8 | 4 2 => 6 5 8 | 4 2 => 6 8 | 5 4 2 => 8 6 5 4 2
3.插入排序(两种)
思想:将待排序序列分成两部分,左边部分是排好序的,右边部分是未排序的,开始时排好序的就只有第一个元素,然后把右边
未排序的元素
一个一个插入排序到左边,直到元素全部到左边就形成了排好序的结构
3.1 直接插入
思想:在将元素插入左边排好序的序列时,通过从左到右一个一个进行比较来查找要插入的位置。
案例:5 2 6 8 4
插入过程:5 | 2 6 8 4 => 5 2 | 6 8 4 => 6 5 2 | 8 4 => 8 6 5 2 | 4 => 8 6 5 4 2
3.2 折半插入
思想:在将元素插入左边排好序的序列时,通过二分搜索的方式查找到要插入的位置。找到位置后插入的过程和直接插入一致
4.希尔排序
思想:将元素进行同余分组,比如元素个数有8个,若将其分为d1=4组,即每一个元素的下标进行模3运算,下标{0,4}模4余数都
为0为一组,{1,5}余1
为一组,{2,6}余2为一组,{3,7}余3为一组,当然这只是一种逻辑上的划分,并不是物理上对其进行
切分。然后在各组内进行直接插入排序,排序完再对其进行分组,一般取d(i+1) = ⌊d(i)/2