选择排序和插入排序

来源:互联网 发布:淘宝描述不符有赔偿吗 编辑:程序博客网 时间:2024/05/22 09:05

选择排序

  • 排序算法的实现思路

    首先找到数组中的最小的那个元素,其次,将它和数组中的第一个元素交换位置(如果第一个元素是最小最值那么它就和自己交换)。再次,在剩下的元素中,找到最小的元素,将它和数组的第二个元素交换位置。直到将整个数组排序完成。选择排序在不断选择剩余元素中的最小值。

  • 实现

public void sort(int[] a){    int len = a.length;  //数组的长度    for(int i = 0; i < len; i++){ //将a[i]和a[i+1..N]中最小的元素进行交换        int min = i;  //记录最小值的索引        for(int j = i+1; j < N; j++)            less(a[j], a[min]) j = min;        exchange(a, i, min);    }}
  • 时间复杂度的分析
    交换只进行N次,0到n-1次的任意i都会进行N-1-i次比较,所以(N-1)+(N-2)+(N-3)+…+2+1 = N^2/2次比较,时间复杂度是O(n^2)

插入排序

  • 算法实现思路

    当前索引i左边的所有元素都是有序的,但是他们的最终位置还不确定,为了给最小的元素腾出空间,可能会被移动。但是当索引

  • 代码实现

public void insertSort(int[] a){//升序排序    int N = a.length;    for(int i = 1; i < N; i++){        //将a[i]插入到a[i-1],a[i-2], a[i-3]之间        for(int j = i; j > 0 && less(a[j], a[j-1]); j--)//j指向要排序的元素            exch(a, j, j-1);    }}


  • 时间复杂度

最坏情况下是O(n^2)

原创粉丝点击