一、算法基本思想
(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
}
冒泡排序是排序算法的一种,思路清晰,代码简洁,常被用在大学生计算机课程中。“冒泡”这个名字的由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端,故名。这里以从小到大排序为例进行讲解。基本思想及举例说明
冒泡排序的基本思想就是不断比较相邻的两个数,让较大的谈厅返元素不断地往后移。经过一轮比较就,选出最大的数;经过第2轮比较,就选出次大的数,以此类推。下面以对 3 2 4 1 进伏简行冒泡排序含饥说明。
1.这个算法用rand函数产生新的要排序的数据,与已有的有序数列中的数据依次比较,如果遇到比他大的数据,就从该数据开始,一直交换到末尾,达到一个插入的效果。从而形成有序的数列。
2.此外,只用rand函数并不能达到真正随机的效果。如果要实现真正随机的效果,还要配合srand函数才行。
3.具体代码如下:#include "stdio.h"#include "stdlib.h"void main(){int a[10],temp,rprintf("请输入一个种子\n")scanf("%d",&r)srand(r)for(int i=0i<9i++) 。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)