Java冒泡排序的原理
发布时间:2025-05-20 01:10:27 发布人:远客网络
一、Java冒泡排序的原理
冒泡排序是所欲排序算法里最好理解的了。
A)比较相邻的元素。如果第一个比第二个大,就交换他们两个。
B)对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
C)针对所有的元素重复以上的步骤,除了最后一个。
D)持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
public static void main(String[] args){
int score[]={67, 69, 75, 87, 89, 90, 99, 100};
for(int i= 0; i< score.length-1; i++){//最多做n-1趟排序
for(int j= 0;j< score.length- i- 1; j++){//对当前无序区间score[0......length-i-1]进行排序(j的范围很关键,这个范围是在逐步缩小的)
if(score[j]< score[j+ 1]){//把小的值交换到后面
int temp= score[j];
score[j]= score[j+ 1];
score[j+ 1]= temp;
}
}
System.out.print("第"+(i+ 1)+"次排序结果:");
for(int a= 0; a< score.length; a++){
System.out.print(score[a]+"\t");
}
System.out.println("");
}
System.out.print("最终排序结果:");
for(int a= 0; a< score.length; a++){
System.out.print(score[a]+"\t");
二、用java冒泡排序和递归算法
(1)基本思想:在要排序的一组数中,对当前还未排好序的范围内的全部数,自上而下对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒。即:每当两相邻的数比较后发现它们的排序与排序要求相反时,就将它们互换。
inta[]={1,54,6,3,78,34,12,45};
for(inti=0;i<a.length;i++){
for(intj=i+1;j<a.length;j++){
递归算法,就是程序的自身调用。表现在一段程序中往往会遇到调用自身的那样一种coding策略,可以利用大道至简的思想,把一个大的复杂的问题层层转换为一个小的和原问题相似的问题来求解的这样一种策略。能看到我们会用很少的语句解决了非常大的问题,所以递归策略的最主要体现就是小的代码量解决了非常复杂的问题。
publicstaticvoidmain(Stringargs[]){
privatestaticintfab(intindex){
returnfab(index-1)+fab(index-2);
三、用Java中ArrayList类实现一个冒泡排序
public static<T extends Comparable<? super T>> void sort(List<T> list)根据元素的自然顺序对指定列表按升序进行排序。列表中的所有元素都必须实现 Comparable接口。此外,列表中的所有元素都必须是可相互比较的(也就是说,对于列表中的任何 e1和 e2元素,e1.compareTo(e2)不得抛出 ClassCastException)。
此排序方法具有稳定性:不会因调用 sort方法而对相等的元素进行重新排序。
指定列表必须是可修改的,但不必是大小可调整的。
该排序算法是一个经过修改的合并排序算法(其中,如果低子列表中的最高元素小于高子列表中的最低元素,则忽略合并)。此算法提供可保证的 n log(n)性能。此实现将指定列表转储到一个数组中,并对数组进行排序,在重置数组中相应位置处每个元素的列表上进行迭代。这避免了由于试图原地对链接列表进行排序而产生的 n2 log(n)性能。
ClassCastException-如果列表包含不可相互比较的元素(例如,字符串和整数)。
UnsupportedOperationException-如果指定列表的列表迭代器不支持 set操作。
--------------------------------------------------------------------------------
public static<T> void sort(List<T> list,
Comparator<? super T> c)根据指定比较器产生的顺序对指定列表进行排序。此列表内的所有元素都必须可使用指定比较器相互比较(也就是说,对于列表中的任意 e1和 e2元素,c.compare(e1, e2)不得抛出 ClassCastException)。
此排序被保证是稳定的:不会因调用 sort而对相等的元素进行重新排序。
排序算法是一个经过修改的合并排序算法(其中,如果低子列表中的最高元素小于高子列表中的最低元素,则忽略合并)。此算法提供可保证的 n log(n)性能。指定列表必须是可修改的,但不必是可大小调整的。此实现将指定列表转储到一个数组中,并对数组进行排序,在重置数组中相应位置每个元素的列表上进行迭代。这避免了由于试图原地对链接列表进行排序而产生的 n2 log(n)性能。
c-确定列表顺序的比较器。null值指示应该使用元素的自然顺序。
ClassCastException-如果列表中包含不可使用指定比较器相互比较的元素。
UnsupportedOperationException-如果指定列表的列表迭代器不支持 set操作。