算法---冒泡排序和选择排序

142 阅读1分钟

冒泡排序

规则(以从小到大为例)

  1. 相邻的元素两两比较,小的放左边,大的放右边
  2. 第一轮比较完毕之后,最大值就已经确认放到右边了,则第二轮可以少循环遍历一次,以此类推
  3. 如果数组中有n个数据,总共只需遍历n-1次即可

案例(java)

int[] array = {2,1,3,5,4};

//外循环:表示要执行多少轮的循环,如果有n个数据则执行n-1轮
//-1:亦是为了防止索引越界
for(int i = 0; i<array.length -1; i++){
  //内循环:每一轮循环是怎么比较数据并找到最大并放到最右边
  //-i:提高效率,每一轮执行的次数都应该比上一轮少一次
  for(int j = 0; j<array.length - 1 - i; j++){
    if(array[i] > array[i+1]){
      int temp = array[i];
      array[i] = array[i+1];
      array[i+1] = temp;
    }
  }
}

print(array);//1,2,3,4,5

选择排序

规则

  • 从0索引开始,拿着每个索引上的元素跟后面的元素依次比较,小的放前面,大的放后面,以此类推
  • 如果数组中有n个数据,总共只需遍历n-1次即可

案例(java)

int[] array = {2, 4, 1, 5, 3};

//外循环:需要循环n-1轮
for (int i = 0; i < array.length - 1; i++) {
  //内循环:拿着每一轮中的i与i后面的数据(i+1,i+2...)依次进行比较
    for (int j = i + 1; j < array.length; j++) {
        System.out.println("i:" + i + " j:" + j);
        if (array[i] > array[j]) {
            int temp = array[i];
            array[i] = array[j];
            array[j] = temp;
        }
    }
}

print(array);//1,2,3,4,5