作爲編程小白,最近在學習算法,所以想把幾種排序算法溫習一遍,本文所有排序都爲升序
,並且描述代碼爲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:圖片源自網絡