排序

101 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第1天,点击查看活动详情 【冒泡排序】 每一趟只能确定将一个数归位。即第一趟只能确定将末位上的数归位,第二趟只能将倒数第 2 位上的数归位,依次类推下去。如果有 n 个数进行排序,只需将 n-1 个数归位,也就是要进行 n-1 趟操作。而 “每一趟 ” 都需要从第一位开始进行相邻的两个数的比较,将较大的数放后面,比较完毕之后向后挪一位继续比较下面两个相邻的两个数大小关系,重复此步骤,直到最后一个还没归位的数。

        for (j=0; j<len-1-i; j++) {  内循环为每趟比较的次数,第i趟比较len-i次 
            if (arr[j] > arr[j+1]) {  相邻元素比较,若逆序则交换(升序为左大于右,降序反之) 
                temp = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = temp;
            }
        }

【优化1】每一轮扫描完看是不是进入了if,在某轮一直没有进if就说明有序了

是稳定的排序算法,冒泡排序总的平均时间复杂度为

选择排序】

第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。

是不稳定的排序算法,选择排序总的平均时间复杂度为O(n^{2})

 数组 6、7、6、2、8,在对其进行第一遍循环的时候,会将第一个位置的6与后面的2进行交换。