Java冒泡排序法

我写的大部分博客,基本上都是留作日后回忆知识点所用,当然,如果我的文章能帮到道友们!我会更加的开心,与荣幸!如果有错误之处,请海涵,并指出问题所在,看见后我必加以修改,感谢!共勉。一起进步!

之前看过的一篇博客之中,总结了排序的效率的问题,基本上(不说死)

冒泡<选择<插入<快速(快速排序法的效率最高)

冒泡排序法:

概念:

冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。
它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果他们的顺序(如从大到小、首字母从A到Z)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素已经排序完成。
这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。

代码实现(以蓝桥杯中的问题为例!):

注意一点:数组中涉及循环时,例如:

for(int i = 0;i<n;i++)
{
	a[i] = sc.nextInt();
}  

由于是从0开始,所以在i<n的位置处,就尽量不要马虎的加上“=”

 1 /**
 2 问题描述
 3   给定一个长度为n的数列,将这个数列按从小到大的顺序排列。1<=n<=200
 4 输入格式
 5   第一行为一个整数n。
 6   第二行包含n个整数,为待排序的数,每个整数的绝对值小于10000。
 7 输出格式
 8   输出一行,按从小到大的顺序输出排序后的数列。
 9 样例输入
10 5
11 8 3 6 4 9
12 样例输出
13 3 4 6 8 9
14 **/
15 import java.util.Scanner;
16
17 public class Main {
18     public static void main(String[] args) {
19         Scanner sc = new Scanner(System.in);
20         int n = sc.nextInt();
21         if (n >= 1 && n <= 200) {
22             int[] a = new int[n];
23             for (int i = 0; i < n; i++) {
24                 a[i] = sc.nextInt();
25                 if(a[i]<-10000||a[i]>10000){
26                     return;
27                 }
28             }
29
30             // 这里为最主要的部分
31             for (int i = 0; i < a.length - 1; i++) {
32                 for (int j = 0; j < a.length - i - 1; j++) {
33                     if (a[j] > a[j + 1]) {
34                         int temp = a[j];
35                         a[j] = a[j + 1];
36                         a[j + 1] = temp;
37                     }
38                 }
39             }
40             for (int i = 0; i < a.length; i++) {
41                 System.out.print(a[i] + " ");
42             }
43
44         }
45     }
46 }

优缺点:

优点:比较简单,空间复杂度较低,相比于其他的排序方法,是比较稳定的

缺点:时间复杂度相对来说较高,相比于其他的排序方法,效率比较慢

选择排序法:

概念:

快速排序(Quicksort)是对冒泡排序的一种改进。
快速排序由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

代码实现(以蓝桥杯中的问题为例!):

最近忙于别的课程,有时间就会就会继续写。共勉,加油!时间不多了!

原文地址:https://www.cnblogs.com/Hrain/p/10471449.html

时间: 2024-10-10 14:25:33

Java冒泡排序法的相关文章

Java冒泡排序法实现

“冒泡排序法”可以将一个无序的数组按照从小到大的顺序或者是从大到小的顺序进行排序,是一种较为常见的排序算法,因为数据从小到大或者从大到小地到数列头或者数列末的过程称为“冒泡”.对于冒泡排序我觉得最重要的两点就是:(1)需要重新排序的次数,即循环的次数,这个是根据数组的序列的大小来定的,比如数组的大小为n的话,需要循环的次数就为(n - 1)次:(2)另外一个就是每次循环需要进行数据之间比较的次数,每次排序后可以确定出最大或者最小的那个数据,下次循环时就不用再进行比较了,所以每次进行比较的次数是(

Java冒泡排序法升级版

/*  * 冒泡排序之升级版,可比较整型数组.小数型数组  *   * */ public static <T extends Comparable<T>> void BubbleGeneric(T[] arr) {    T temp;  for (int i = 0; i < arr.length - 1; i++) {   for (int j = 0; j < arr.length - 1 - i; j++) {    if (arr[j + 1].compar

Java冒泡排序法:

例: public static void main(String[] args) { int[] a = {3,1,4,22,0}; for (int i = 0; i < a.length-1;i++) { for (int j = 0; j < a.length-1-i;j++) { if (a[j] > a[j+1]) { int tmp = a[j]; a[j] = a[j+1]; a[j+1] = tmp; } } } for (int i = 0; i < a.len

java算法之冒泡排序法

N个数字要排序完成,总共进行N-1趟排序,每第 i 趟的排序次数为 (N-i) 次,所以 可以用双重循环语句,外层控制循环多少趟,内层控制每一趟的循环次数,即   for(inti=0;i<arr.length-1;i++){         for(intj=0;j<arr.length-1-i;j++){         } } 冒泡排序法 口诀: 外层循环 0到n-1 //控制比较轮数 n 表示元素的个数 内层循环 0到n-i-1 //控制每一轮比较次数 两两比较做交换   冒泡排序的优

关于Java中的选择排序法和冒泡排序法

一,这种方法是直接传入一个数组进行排序(选择排序法) public static void selectSort(int arr[]){ for (int i = 0; i < arr.length-1; i++) { for (int j = i+1; j < arr.length; j++) { if(arr[j]<arr[i]){ int temp=arr[i]; arr[i]=arr[j]; arr[j]=temp; } } } } 二,这种事传入一个数组和一个数组个数(选择排序

算法大神之路----排序(冒泡排序法)

冒泡排序法 冒泡排序法又称为交换排序法,是由观察水中冒泡变化构思而成,气泡随着水深压力而改变.气泡在水底时,水压最大,气泡最小,而气泡慢慢浮上水面时,气泡所受压力最小,体积慢慢变大. 冒泡排序比较方式是从第一个元素开始,比较相邻的元素大小,如果大小顺序有误,则对调后进行下一个元素比较.直到所有元素满足关系为止. 冒泡排序法分析 冒泡排序法平均情况下,需要比较(n-1)/2次,时间复杂度为O(n2),最好的情况只需要扫描一次,不用操作,即作n-1次比较,时间复杂度为O(n). 由于冒泡排序为相邻两

二分查找法 冒泡排序法

二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好; 其缺点是要求待查表为有序表,且插入删除困难.因此,折半查找方法适用于不经常变动而查找频繁的有序列表. 首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功; 否则利用中间位置记录将表分成前.后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表. 重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功. 二分查找

数据结构:链表 &gt;&gt; 链表按结点中第j个数据属性排序(冒泡排序法)

创建结点类,链表类,测试类 1 import java.lang.Object; 2 //结点node=数据date+指针pointer 3 public class Node { 4 Object iprop; 5 public Object getIprop(int i){ 6 switch(i){ 7 case 1:iprop=num;break; 8 case 2:iprop=name;break; 9 case 3:iprop=score;break; 10 } 11 return i

PHP 冒泡排序法

1 <?php 2 // 冒泡排序法:将一个数组中的值按照从小到大的顺 序排序 3 $arr = array(1, 4, 5, 2, 3, 7, 9, 8); 4 $len = count($arr); 5 $len2= $len - 1; 6 for ($i = 0; $i < $len; $i++) 7 { 8 for ($j = 0; $j < $len2; $j++) 9 { 10 if ($arr[$j] > $arr[$j + 1]) // 比较当前的与下一个的大小 1