zoukankan      html  css  js  c++  java
  • 排序算法

    稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面。

    不稳定:如果a原本在b的前面,而a=b,排序之后 a 可能会出现在 b 的后面。

    时间复杂度:对排序数据的总的操作次数。反映当n变化时,操作次数呈现什么规律。

    空间复杂度:是指算法在计算机内执行时所需存储空间的度量,它也是数据规模n的函数。 

    排序大的分类可以分为两种:内排序和外排序。在排序过程中,全部记录存放在内存,则称为内排序,如果排序过程中需要使用外存,则称为外排序。下面讲的排序都是属于内排序。

    内排序有可以分为以下几类:

      (1)、插入排序:直接插入排序、二分法插入排序、希尔排序。

      (2)、选择排序:直接选择排序、堆排序。

      (3)、交换排序:冒泡排序、快速排序。

      (4)、归并排序

      (5)、基数排序

    (1)选择排序(从小到大)

             1)思想:选择排序,让数组中的每一个数,依次与后面的数进行比较,如果前面的数大于后面的数,就进行位置的交换。这种说法或许有些人看不明白。换个说法,选择排序:第一个数依次与

                      后面的数比较,第一次比较完之后最小的数在最前面 。

              不理解的看看图应该就差不多了,真不明白就和明白的人讨论讨论吧。

                  

             2)代码

                     import java.util.Arrays;
                     /**
                      * 练习排序-选择排序
                      * @author Administrator
                      *
                      */
                     public class Dome2 {
                                public static void main(String[] args) {
                                     //数组
                                     int[] arr = {5,3,7,2,6,7,6,5,4,1,9,8};
                                    //第一次循环,是确定一个数依次和后面数的比较的数。
                                    for (int i = 0; i < arr.length -1 ; i++) {
                                       //这个是和第一个数的比较的数
                                        for (int j = i+1; j < arr.length; j++) {
                                          //定义一个临时的变量,用来交换变量
                                           int temp ;  
                                           if(arr[i]>arr[j]){
                                                temp =  arr[i];
                                                arr[i] = arr[j];
                                                arr[j] = temp;
                                           }
                                       }
                                    }
                            //打印最后的排序结果
                            System.out.println(Arrays.toString(arr));
                             }
                    }

      (2)冒泡排序(从小到大)    

             1)思想:相邻两个数进行比较,第一波比较后,最大的数在最后。(每比较完之后,后面的数就减少一个比较 )

                    

           

    1. 1、数组的冒泡排序  
    [java] view plain copy
     
    1. public void bubbleSort(int a[]) {   
    2.   
    3.     int n = a.length;   
    4.   
    5.     for (int i = 0; i < n - 1; i++) {   
    6.   
    7.       for (int j = 0; j < n - 1; j++) {   
    8.   
    9.         if (a[j] > a[j + 1]) {   
    10.   
    11.           int temp = a[j];   
    12.   
    13.           a[j] = a[j + 1];   
    14.   
    15.           a[j + 1] = temp;   
    16.   
    17.         }   
    18.   
    19.       }   
    20.   
    21.     }   
    22.   
    23. }   

    冒泡排序写错了,第二层循环是 n-i

     回复u014737138:j<n-i-1

    回复u014737138:j<n-i-1

    回复u014737138:j<n-i-1

  • 相关阅读:
    selenium之css选择器高级用法
    常系数线性齐次递推新理解
    关于莫队本质的理解
    2021.5.8总结
    决策单调性优化dp
    字符串 复习
    5.1总结
    树分块 学习笔记
    莫反 复习
    P4570 [BJWC2011]元素
  • 原文地址:https://www.cnblogs.com/panxuejun/p/8778094.html
Copyright © 2011-2022 走看看