冒泡排序和选择排序

排序的原理都是一样的,都是经过length-1轮排序,每一轮拿到一个最大值或者最小值,放到数组的最前面或者最后面 ,然后剩下的值进入下一轮排序。

排序一个数组s=[2,6,9,3,4,8,5],length=s.length

冒泡排序

第一轮

s[0]和s[1]比较,如果是s[0]<s[1],两者交换位置;s[1]和[2]比较,如果s[1]<s[2],两者交换位置;......s[length-2]和s[length-1]比较,如果s[length-2]<s[length-1],两者交换位置。这样就拿到s[0]...s[length-1]的最大值,并放到s[length-1]的位置。

第二轮

s[0]和s[1]比较,如果是s[0]<s[1],两者交换位置;s[1]和[2]比较,如果s[1]<s[2],两者交换位置;......s[length-3]和s[length-2]比较,如果s[length-3]<s[length-2],两者交换位置。这样就拿到s[0]...s[length-2]的最大值,并放到s[length-2]的位置。
.....

第lengh-1轮

s[0]和s[1]比较,如果是s[0]<s[1],两者交换位置,这样就拿到s[0]到s[1]的最大值,并放到s[1]的位置。

这样经过length-1轮,我们就排序完成了,实现代码
        for(int i=0;i<is.length-1;i++) {
            for(int j=0;j<is.length-1-i;j++) {
                if(is[j]>is[j+1]) {
                    swap(j,j+1);//交换顺序
                }
            }
        }

选择排序

第一轮

s[0]和s[1]比较,如果是s[0]>s[1],两者交换位置;s[0]和[2]比较,如果s[0]>s[2],两者交换位置;......s[0]和s[length-1]比较,如果s[0]>s[length-1],两者交换位置。这样就拿到s[0]...s[length-1]的最小值,并放到s[0]的位置。

第二轮

s[1]和s[2]比较,如果是s[1]>s[2],两者交换位置;s[1]和[3]比较,如果s[1]>s[3],两者交换位置;......s[1]和s[length-1]比较,如果s[1]>s[length-1],两者交换位置。这样就拿到s[1]...s[length-1]的最小值,并放到s[1]的位置。
.....

第lengh-1轮

s[length-2]和s[length-1]比较,如果是s[length-2]>s[length-1],两者交换位置,这样就拿到了s[length-2]到s[length-1]的最小值,并放到s[length-2]的位置。

这样经过length-1轮,我们就排序完成了,实现代码
        for(int i=0;i<s.length-1;i++) {
            for(int j=i;j<s.length;j++) {
                if(s[i]>s[j]) {
                    swap(i,j);//交换顺序
                }
            }
        }

到这里,两种最常见的排序就完结了,虽然简单,但是很重要!

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容