排序算法

稳定:如果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

posted @ 2018-04-10 12:00  跨境电商杂货铺  阅读(164)  评论(0编辑  收藏  举报