排序算法——(1)冒泡排序、选择排序

排序算法

                                        ——冒泡、选择(Java语言)

一、冒泡排序

    算法描述:

        1、设待排序序列中的记录的数为n

        2、一般地,第 i 趟起泡排序从1 到 n-i+1

        3、依次比较相邻两个记录的关键字,如果发生逆序,则交换之。

        4、其结果是这 n-i+1 个记录中,关键字最大的记录被交换到第 n-i+1 的位置上,最多作 n-1 趟。


代码:

public class sortMethods {
 public static void main(String[] args) {
   int a[]={8,3,2,5,9,3,6};
   bubbleSort(a);    
   Print(a);
 }
 
 //冒泡排序
 private static void bubbleSort(int[] a) {
   for(int i=0;i<a.length-1;i++){
     for(int j=0;j<a.length-i-1;j++){
       if (a[j]>a[j+1]) {
         swap(a,j,j+1);
       }
     }
   }  
 }
 
 private static void swap(int[]a,int i,int j) {
   int temp;
   temp = a[i];
   a[i] = a[j];
   a[j] = temp;  
 }

 private static void Print(int[] a) {
   for(int num:a){
     System.out.print(num+"\t");
   }
   System.out.println();    
 }
}

冒泡算法也是可以优化的,优化后算法如下:

private static void bubbleSort2(int[] a) {
   for(int i=0;i<a.length-1;i++){
     boolean flag = true;
     for(int j=0;j<a.length-i-1;j++){
       if (a[j]>a[j+1]) {
         swap(a,j,j+1);
         flag = false;
       }
     }
     if (flag) {
       break;
     }
   }  
 }

时间复杂度:T(n)=O(),空间复杂度:S(n)=O(1)


二、选择排序

        1、首先通过n-1次比较,从n个数中找出最小的, 将它与第一个数交换——第一趟选择排序,结果最小的数被安置在第一个元素位置上。

        2、再通过n-2次比较,从剩余的n-1个数中找出关键字次小的记录,将它与第二个数交换——第二趟选择排序。

        3、重复上述过程,共经过n-1趟排序后,排序结束。


简单的理解,第一趟找到整个数列中最小的那个数,把它和整个数列的第一位交换位置,然后找到第二小的数,把它和第二位书交换位置~以此类推~

代码:

//选择排序
 private static void selectSort(int[] a) {
   for(int i=0;i<a.length-1;i++){
     int k=i;
     for(int j=i+1;j<a.length;j++){
       if (a[j]<a[k]) {
         k=j;  
       }
     }
     if (k!=i) {
       swap(a, i, k);
     }
   }
 }
时间复杂度:T(n)=O( ),空间复杂度:S(n)=O(1)

猜你喜欢

转载自blog.csdn.net/weixin_40849588/article/details/80358007