一直以来老是容易把选择排序和冒泡排序混淆,这次通过debug跟踪程序总算是弄明白两者之间的差别了。先说说选择排序和冒泡排序最主要的区别。最主要的就一点,选择排序是在每次排序的时候找出最小(或最大)的那个元素,然后与假定的那个元素交换位置,但是在找出那个元素之前是不交换位置的。而冒泡排序是在每次排序的时候通过交换下一个元素的位置来找出最小(或最大)的那个元素,并同时安排好这个元素的位置。关键代码差别:
选择排序:
for(int i=...){
int min=i; //假定一个最小(或最大)元素下标
for(int j=...){
if(array[min]>array[j]){ //循环一次,在这次循环中找到最小(或最大)元素下标,min相当于一个指针,指向最小的那个元素
min=j;
}
}
}
冒泡排序:
for(int i=...){
for(int j=...){
if(array[j]>array[j+1]){ //相邻的两个元素比较,当满足条件时交换位置,注意这里只是相邻的两个元素两两交换位置
...;
}
}
}
这是两个排序最主要的区别所在。
选择排序的基本思想是:第一趟从n个元素的数据序列中选出关键字最小(或最大)的元素并放到最前(或最后)的位置,下一趟再从n-1个元素中选出最小(大)的元素并放到次前(后)的位置,经过n-1趟完成排序。
public static void selectSort(int array[]){
for(int i=0;i<array.length-1;i++){
int min=i;
for(int j=i+1;j<array.length;j++){
if(array[min]>array[j]){
min=j;
}
}
if(min!=i){
int temp=array[min];
array[min]=array[i];
array[i]=temp;
}
}
}
而冒泡排序的基本思想:比较相邻两个元素的关键字值,如果反序则交换。若按升序排序,每一趟将被扫描的数据序列中的最大元素交换到最后位置。
public static void bubbleSort(int array[]){
for(int i=0;i<array.length-1;i++){
for(int j=0;j<array.length-i-1;j++){
if(array[j]>array[j+1]){
int temp=array[j];
array[j]=array[j+1];
array[j+1]=temp;
}
}
}
}
选择排序和冒泡排序在代码上有个很大的区别,就是在交换数据的时候,选择排序是在第一层for循环,而冒泡排序是在第二层for循环。
分享到:
相关推荐
选择排序、插入排序、冒泡排序以及快速排序和归并排序的C语言实现,绝对可用
交换排序 选择排序 冒泡排序 插入排序
直接插入排序 选择排序 堆排序 归并排序 快速排序 冒泡排序等七种排序方法
插入排序,选择排序,基数排序,冒泡排序的C++实现
数据结构(c语言版)严蔚敏 吴伟民编著 中直接插入排序、折半排序、shell排序、冒泡排序、快速排序、选择排序、堆排序的实现、归并排序,使用c语言实现
选择排序,冒泡排序,插入排序 基数排序,快速排序,归并排序
经典排序算法,有选择排序,冒泡排序,交换排序,谢尔排序,插入排序基数排序
JAVA排序算法: 直接插入,希尔排序,选择排序,堆排序,冒泡排序,快速排序,归并排序,包括算法的详细介绍,以及对几种算法的详细测试
7大排序算法(快速排序,冒泡排序,选择排序,归并排序,插入排序,希尔排序,堆排序)实现源码
常见的几种排序方式,包括选择排序,冒泡排序,快速排序,希尔排序,堆排序,插入排序。vs2008实现,对话框方式,主要实现字符串的由小到大排序。点击“几种排序方法.vcproj“运行。字符集使用多字节集,不能用...
js冒泡排序js冒泡排序js冒泡排序js冒泡排序js冒泡排序js冒泡排序js冒泡排序js冒泡排序js冒泡排序js冒泡排序js冒泡排序js冒泡排序js冒泡排序js冒泡排序js冒泡排序js冒泡排序js冒泡排序js冒泡排序js冒泡排序js冒泡排序...
讲述了选择排序和冒泡排序的代码例题,主要是一些小程序,适合初学者观看
这是根据数据结构书上讲的线性表的排序方法改写成链表,上面有简单的测试程序。
合并排序,插入排序,希尔排序,快速排序,冒泡排序,桶排序的C语言实现,原创。
冒泡排序和选择排序均用两种方法实现,原始方法和在原始方法上的改进和优化,对应博客地址:http://blog.csdn.net/ns_code/article/details/20065107
有一个模板类写出了快速排序,冒泡排序,插入排序,选择排序四种算法。用的是C++哦
六种内部排序算法比较:直接插入排序、希尔排序、冒泡排序、快速排序、选择排序、堆排序。包含实验报告和源代码设计。
详细介绍选择排序、冒泡排序、插入排序且有相应的代码分析
冒泡排序 简单选择排序 c语言基础 排序算法 数组操作 排序算法实验 简单的c语言程序 排序算法输出
数据结构---直接插入排序/快速排序/选择排序/冒泡排序(详细实现算法和性能比较)