java面向對象的冒泡排序,選擇排序和插入排序的比較


這三種排序有倆個過程:

  1.比較倆個數據。                                     

  2.交換倆個數據或復制其中一項。

 

這三種排序的時間級別

  冒泡排序:比較 (N-1)+(N-2)+...+2+1 = N*(N-1)/2=N2/2

       交換  0——N2/2 = N2/4

       總時間 3/4*N2

  選擇排序:比較 (N-1)+(N-2)+...+2+1 = N*(N-1)/2=N2/2

       交換  0——3*(N-1)=3*(N-1)/2=3/2*N

       總時間 N2/2+3/2*N

  插入排序:第一輪最多比較一次,第二輪最多比較倆次,最后一輪比較N-1次,所以最多比較N*(N-1)/2。

       復制的次數和比較的次數大致相等,但是復制消耗的時間比交換要小.

       比較 0——N*(N-1)/2=N*(N-1)/4=N2/4

       復制 0——N*(N-1)/2=N*(N-1)/4=N2/4

       總時間 N2//2

  總結:插入排序算法比冒泡快一倍,比選擇排序略快一點,但這些算法都是O(N2)的時間級別。

  

這三種排序的思想  

  冒泡排序:在首輪,第一項和第二項比較,將大的放在后面,然后比較第二項和第三項,將大的放在后面,以此類推在首輪結束,最大的數據已經在最后一項了。在一輪輪的比較中,后面的已經排好的數據項越來越多,需要排序的數據項越來越少,直到為零。

  選擇排序:在冒泡排序上做了優化,減少了交換次數,在首輪選擇最小的數放在第一項,一輪之后第一項是有序的了,第二輪從第二項開始選擇最小的數放在第二項,以此類推,直到整個數組完全有序。

  插入排序:和前倆種排序不同,插入排序在排序過程中是局部有序,隨着插入項的增多,有序部分的項的位置會發生改變,而冒泡排序和選擇排序每輪確定的項數的位置是永遠不變的。在首輪,選擇第二項作為插入項,然后取出這一項放在一個變量中,和前一項比較而且小,則前一項后移到第二項的位置,然后第二項也就是插入項放在前一項的位置,第二輪選擇第三項作為插入項然后取出和前一項也就是第二項比較如果小,第二項后移到插入項,然后插入相在和第一項比較如果小,則第一項后移到第二項,插入項放在第一項,以此類推。

 

這三種排序的java程序

  1.冒泡排序

package aa;
class BubbleSort{
    private long[] a;
    private int nElems;
    
    public BubbleSort(int max){
        a = new long[max];
        nElems = 0;
    }
    
    public void insert(long value){
        a[nElems] = value;
        nElems ++;
    }
    
    public void display(){
        for(int i = 0; i < nElems; i++)
        {
            System.out.println(a[i] + " ");
        }
        System.out.println("");
    }
    
    public void bubbleSort(){
        for(int i = 0; i < nElems - 1; i++)
        {
            for(int j = 0; j < nElems - 1 - i; j++)
            {
                if(a[j] > a[j + 1])
                {
                    long temp = a[j];
                    a[j] = a[j + 1];
                    a[j + 1] = temp;
                }
            }
        }
    }
}
public class BubbleSortApp {
    public static void main(String[] args){
        BubbleSort arr = new BubbleSort(100);
        arr.insert(77);
        arr.insert(99);
        arr.insert(44);
        arr.insert(55);
        arr.insert(22);
        arr.insert(88);
        arr.insert(11);
        arr.insert(00);
        arr.insert(66);
        arr.insert(33);
        arr.display();
        arr.bubbleSort();
        arr.display();
    }    
}

   2.選擇排序

package aa;

class SelectSort{
	private long[] a;
	private int nElems;
	
	public SelectSort(int max){
		a = new long[max];
		nElems = 0;
	}
	
	public void insert(long value){
		a[nElems] = value;
		nElems ++;
	}
	
	public void display(){
		for(int i = 0; i < nElems; i++)
		{
			System.out.println(a[i] + " ");
		}
		System.out.println("");
	}
	
	public void SelectionSort(){
		for(int i = 0; i < nElems - 1; i++)
		{
			int min = i;
			for(int j = i + 1; j < nElems; j++)
			{
				if(a[j] < a[min])
				{
					long temp = a[j];
					a[j] = a[min];
					a[min] = temp;
				}
			}
		}
	}
}

public class SelectSortApp {
	public static void main(String[] args){
		SelectSort arr = new SelectSort(100);
		arr.insert(77);
		arr.insert(99);
		arr.insert(44);
		arr.insert(55);
		arr.insert(22);
		arr.insert(88);
		arr.insert(11);
		arr.insert(00);
		arr.insert(66);
		arr.insert(33);
		arr.display();
		arr.SelectionSort();
		arr.display();
	}	
}

  3.插入排序

package aa;
class InsertSort{
	private long[] a;
	private int nElems;
	
	public InsertSort(int max){
		a = new long[max];
		nElems = 0;
	}
	
	public void insert(long value){
		a[nElems] = value;
		nElems ++;
	}
	
	public void display(){
		for(int j = 0; j < nElems; j++)
		{
			System.out.println(a[j] + " ");
		}
		System.out.println("");
	}
	
	public void insertionSort(){
		int out,in;
		for(out = 1; out < nElems; out++)
		{
			long temp = a[out];
			in = out;
			while(in > 0 && a[in-1] >= temp)
			{
				a[in] = a[in - 1];
				in --;
			}
			a[in] = temp;
		}
	}
}
public class InsertSortApp {
	public static void main(String[] args){
		int maxSize = 100;
		InsertSort arr = new InsertSort(maxSize);		
		arr.insert(77);
		arr.insert(99);
		arr.insert(44);
		arr.insert(55);
		arr.insert(22);		
		arr.insert(88);
		arr.insert(11);
		arr.insert(00);
		arr.insert(77);
		arr.insert(77);	
arr.display(); arr.insertionSort(); arr.display(); } }

  

            


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM