冒泡排序

冒泡排序,第1张

冒泡排序(Bubble Sort)是一种典型的交换排序算法,通过交换数据元素的位置进行排序。

一、算法基本思想

(1)基本思想

冒泡排序的基本思想就是:从无序序列头部开始,进行两两比较,根据大小交换位置,直到最后将最大(小)的数据元素交换到了无序队列的队尾,从而成为有序序列的一部分;下一次继续这个过程,直到所有数据元素都排好序。

算法的核心在于每次通过两两比较交换位置,选出剩余无序序列里最大(小)的数据元素放到队尾。

(2)运行过程

冒泡排序算法的运作如下:

1、比较相邻的元素。如果第一个比第二个大(小),就交换他们两个

2、对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大(小)的数。

3、针对所有的元素重复以上的步骤,除了最后已经选出的元素(有序)。

4、持续每次对越来越少的元素(无序元素)重复上面的步骤,直到没有任何一对数字需要比较,则序列最终有序。

(3)示例

java 的如何实现冒泡算法呢?

其实有两种方法

一种是正序 

/*

* 正序冒泡

* */

public static void sortListAsc(Integer[] list){

if(list.length>0){

for(int i=0i

for(int j=0j

int exchange=0

                if(list[j]>list[j+1]){

exchange= list[j+1]

                    list[j+1]=list[j]

                    list[j]=exchange

                }

}

}

}

for(Integer k:list){

System.out.println(k)

    }

}

一种是反序 

/*

* 反序冒泡

* */

public static void sortListDesc(Integer[] list){

if(list.length>0){

for(int i=(list.length-1)i>0i--){

for(int j=(list.length-1)j>0j--){

int a=0

                      if(list[j]

a=list[j-1]

                          list[j-1]=list[j]

                          list[j]=a

                      }

}

}

}

}

虽然实现的目标是相同的,但是实现的原理也一样  只不过流程是逆向的      

完成之后便是如此   

如果使用Stiring 字符串的compareTo 也可以是实现类似功能  

不过这个比较的是字符串的ASCII码值的大小  ,可以应用于数字字符串的比较, 如此冒泡依旧可以使用。

//实现字符串的冒泡

public static String[]sortAscII(String[] list){

if(list.length>0){

for(int i=(list.length-1)i>0i--){

for(int j=(list.length-1)j>0j--){

String a=""

                if(list[j].compareTo(list[j-1])<0 ){

a=list[j-1]

                    list[j-1]=list[j]

                    list[j]=a

                }

}

}

}

return list

}

冒泡排序,是一种计算机科学领域的较简单的排序算法。

它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小、首字母从Z到A)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。

这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。

算法稳定性

冒泡排序就是把小的元素往前调或者把大的元素往后调。比较是相邻的两个元素比较,交换也发生在这两个元素之间。

所以,如果两个元素相等,是不会再交换的;如果两个相等的元素没有相邻,那么即使通过前面的两两交换把两个相邻起来,这时候也不会交换,所以相同元素的前后顺序并没有改变,所以冒泡排序是一种稳定排序算法。

它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果他们的顺序(如从大到小、首字母从A到Z)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。

冒泡排序算法的原理如下:

比较相邻的元素。如果第一个比第二个大,就交换他们两个。

对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。

针对所有的元素重复以上的步骤,除了最后一个。

持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

扩展资料:

举例:C语言

#include&ltstdio.h&gt

#define ARR_LEN 255/*数组长度上限*/

#define elemType int/*元素类型*/

/*冒泡排序*/

/*1.从当前元素起,向后依次比较每一对相邻元素,若逆序则交换*/

/*2.对所有元素均重复以上步骤,直至最后一个元素*/

/*elemType arr[]:排序目标数组int len:元素个数*/

void bubbleSort(elemType arr[],int len){

elemType temp

int i,j

for(i=0i&ltlen-1i++)/*外循环为排序趟数,len个数进行len-1趟*/

for(j=0j&ltlen-1-ij++){/*内循环为每趟比较的次数,第i趟比较len-i次*/

if(arr[j]&gtarr[j+1]){/*相邻元素比较,若逆序则交换(升序为左大于右,降序反之)*/

temp=arr[j]

arr[j]=arr[j+1]

arr[j+1]=temp

}

}

}

int main(void){

elemType arr[ARR_LEN]={3,5,1,-7,4,9,-6,8,10,4}

int len=10

int i

bubbleSort(arr,len)

for(i=0i&ltleni++)

printf("%d\t",arr<i>)

putchar('\n')

return 0

}

参考资料:

百度百科——冒泡排序


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/10989086.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-12
下一篇2023-05-12

发表评论

登录后才能评论

评论列表(0条)

    保存