三個基本排序算法

作爲編程小白,最近在學習算法,所以想把幾種排序算法溫習一遍,本文所有排序都爲升序,並且描述代碼爲java

1選擇排序

1.1過程分析

對於一個不確定的整形數組,首先將i=0所在的數和後面的所有數進行比較,找出最小的數i=j交換數組中的數,下一次再從i=1開始比較,直到i=num.length-1

1.2動畫分析

在這裏插入圖片描述

1.2算法描述

public class selectsort {
	public static void main(String[] args) {

	int[] num= {2,3,5,4,1,9,8,7,56,3,66,56,52,51,20,32};//要排序的數組
	selectsort(num);
	for(int n:num)    //增強型for語句用於輸出排序後的數組
	{
		System.out.println(n);
	}
	}
	public static void selectsort(int[] num)     //構造方法
	{
		for(int i=0;i<num.length;i++)
		{
			int minindex=i;
			for(int j=i+1;j<num.length;j++)
			{
				if(num[minindex]>num[j])
				{
					minindex=j;
				}
							}
			swap(num,i,minindex);
		}
	}
	public static void swap(int[] num,int i,int minindex)//交換下標爲i和minindex中的數組元素
	{
		int temp;
		temp=num[minindex];
		num[minindex]=num[i];
		num[i]=temp;
	}
}

1.4複雜度

時間複雜度:O(n^2)

2插入排序

2.1算法描述

在一個整形數組中,從第二個數開始,將其與前面的數比較,如果比前面的數小,則與其交換位置,直到其到達數組最左側爲止,如果比前面的數大,則開始從第三個數和前面的數比較大小

2.2動畫分析

在這裏插入圖片描述

2.3算法代碼

public class Insertsort {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int[] num= {2,3,5,4,1,9,8,7,56,66,56,52,51,20,32};//要排序的數組
          Insertsort(num);
          for(int n:num)    //增強型for語句用於輸出排序後的數組
      	{
      		System.out.print(n+",");
      	}
	}
	public static void Insertsort(int[] num)   //排序算法
	{
		for(int i=1;i<num.length;i++)
		{
			      
			for(int j=i;j>0;j--)
			{
				if(num[j]<num[j-1])
				{
					swap(num,j-1,j);
				}
				else{
                    break;
                }
			}
		}
	}
  public static void swap(int[] num,int index,int j)//交換兩個數的下標
  {
	  int temp;
	  temp=num[index];
	  num[index]=num[j];
	  num[j]=temp;
  }
}

2.4複雜度

時間複雜度:O(n^2)

3冒泡排序(也叫氣泡排序)

3.1算法描述

對於一個要排序的數組,首先從下標I=0開始+1,每當遇到兩個數i和i+1,當num[i]>num[i++1]時,交換兩個數的位置,在第一次遍歷後,最大元素肯定在最右側,第二次遍歷後,倒數第二個大樹也在右側第二個位置上,進行num.length-1次遍歷後,素組中元素被升序排序完成

3.2動態分析

在這裏插入圖片描述

3.3算法描述

public class Bobblesort {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int[] num= {2,3,5,4,1,9,8,7,56,66,56,52,51,20,32};//要排序的數組
        Bobblesort(num);
        for(int n:num)    //增強型for語句用於輸出排序後的數組
    	{
    		System.out.print(n+",");
    	}
	}

	private static void Bobblesort(int[] num) {
		for(int i=0;i<num.length;i++)
		{
			for(int j=0;j<num.length-i-1;j++)
			{
				if(num[j]>num[j+1])
				{
					swap(num,j,j+1);
				}
			}
		}
		
	}
	public static void swap(int[] num,int index,int j)//交換兩個數的下標
	  {
		  int temp;
		  temp=num[index];
		  num[index]=num[j];
		  num[j]=temp;
	  }
}

3.4複雜度

時間複雜度:O(n^2)
未完待續…
PS:圖片源自網絡

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章