【java学习】排序_冒泡排序+选择排序

来源:互联网 发布:东海证券交易软件下载 编辑:程序博客网 时间:2024/06/14 09:17
  1. 分类

    稳定排序(相同元素在排序前后相对位置不改变)和不稳定排序(反之)
    稳定排序:冒泡排序 插入排序 归并排序 二叉树排序
    非稳定排序:选择排序 希尔排序 堆排序 快速排序

  2. 排序思想
    【冒泡排序】
    假设排序要求是升序排列,元素总数为sum,那么冒泡排序就是经过(sum-1)次排序,每次排序,相邻的两个元素相互比较,后面的元素小的话就彼此交换位置,这样最大的元素就移动到了最后,每次找到最大值后,下一次需要查找的范围就会减一。这样,直到剩下最后一个元素排序完成。
    这个算法的时间复杂度是O(n*n)
    【选择排序】
    假设排序要求是升序排列,元素总数为sum,那么选择排序就是经过(sum-1)次排序,每次排序,较大的数都会和待排序数组的第一个元素交换位置,这样一次排序的结果就是将第一个元素和最大的元素交换位置,每次排序后下一次查找的范围减一。找到最后的一个元素就是最大的了,此时排序完成。
    这个算法的时间复杂度是O(n*n)

  3. 代码

【冒泡排序】

package bubble;import java.util.Arrays;// 冒泡排序public class BubbleDemo {    public static void main(String[] args) {        // TODO Auto-generated method stub        int[] arrays={1,2,5,4,7,9,8,6,5,6};        // 进行选择的范围        for(int i=arrays.length-1;i>0;i--){            for(int j=0;j<i;j++){                if(arrays[j]>arrays[j+1]){                    // 交换                    int temp=0;                    temp=arrays[j];                    arrays[j]=arrays[j+1];                    arrays[j+1]=temp;                }            }        }        // 打印结果        System.out.println(Arrays.toString(arrays));    }}

【选择排序】

package choose;import java.util.Arrays;// 选择排序public class ChooseDemo {    public static void main(String[] args) {        // TODO Auto-generated method stub        int[] arr={1,3,5,34,6,7,8};        // 选择的次数        for(int i=0;i<arr.length-1;i++){            // 比较的范围            for(int j=i+1;j<arr.length;j++){                // 交换                if(arr[i]>arr[j]){                    int temp=0;                    temp=arr[i];                    arr[i]=arr[j];                    arr[j]=temp;                }            }        }        System.out.println(Arrays.toString(arr));    }}

[ 理解]
冒泡排序和选择排序非常相似,时间复杂度一样,但是不同在于排序过程中的细节,冒泡是在每一次排序结束后,才给最大值位置赋值,而选择排序是在每一次排序中每一次比较(有更大的值)时给最小值位置赋值。

0 0
原创粉丝点击