选择排序和冒泡排序

    之前看算法书的时候对冒泡排序和选择排序有点混淆,它们都是使用双层循环,都存在数据交换.

在阳光明媚的一天,我高高兴兴的打开了我的<<算法图解>>,突然发现选择排序和冒泡排序是

什么鬼,怎么看着都一样,可能是我太久没有用了吧.

①选择排序

 

for (int i = 0; i < arr.length-1; i++) {                   // i 循环的次数:length-1, 
举个栗子: 3,2,1 进行选择排序:                                                                    
第一次内层循环结束的结果是: 1,3,2 
第二次内层循环结束时结果是: 1,2,3		
 此时就已经得出正确的排序结果, 无需再进行第三次的内层循环	                                             
 	for (int j = i; j < arr.length; j++) {             // 内层循环从i 开始进行比较, 因为 i 之前的元素已经完成了排序
		if(arr[i] > arr[j]){                       // 此处是选择排序和冒泡排序的核心区别(我是这么认为的-->或者说是我瞎掰的)                              
//整个if语句块是为了找出需要排序的元素中的最小值,并进行交换
			int temp = arr[j];
			arr[j] = arr[i];
			arr[i] = temp;
		}
	}			
}

 

 

 

②冒泡排序

 

  for(int i = 0 ; i < arr.length-1 ; i++){              // 此处和选择排序中的栗子原理相同
      for(int j = 0 ; j < arr.length-1-i ; j++){        // -1是防止索引越界(因为内层循环中的if语句块中存在 arr[j+1])  -i是为了提高效率
          if(arr[j] >= arr[j+1]){                       // 相邻两个元素之间进行比较     ( 此处是选择排序和冒泡排序的核心区别 )
      //if 语句块每次比较的是相邻的两个元素之间的比较,并进行交换
             int temp = arr[j];
             arr[j] = arr[j+1];
             arr[j+1] = temp;
          }
      }
  }

    折腾了这么久,我觉得我已经饿了, 将就着看吧. 要是有错误或者建议大家可以提出。

 

 

 

 

你可能感兴趣的:(冒泡排序,选择排序,算法,算法/Algorithm)