我写的大部分博客,基本上都是留作日后回忆知识点所用,当然,如果我的文章能帮到道友们!我会更加的开心,与荣幸!如果有错误之处,请海涵,并指出问题所在,看见后我必加以修改,感谢!共勉。一起进步!
之前看过的一篇博客之中,总结了排序的效率的问题,基本上(不说死)
冒泡<选择<插入<快速(快速排序法的效率最高)
冒泡排序法:
概念:
冒泡排序(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