標籤:import shel ati color out ext can 選擇 移動
接下來兩天重新看看幾種常用的排序演算法。
1、冒泡排序法
每次從 i=0開始比較相鄰的元素,若arr[i]>arr[i+1],則交換它們。直到把最大的元素推向最後。回到 i=0,直至完成。
1 import java.util.Scanner; 2 class bubble 3 { 4 public static void main(String[] args) 5 { 6 int n,temp; 7 int i,j; 8 int[] arr=new int[10000]; 9 Scanner scanner=new Scanner(System.in);10 11 System.out.printf("輸入n=");12 n=scanner.nextInt();13 14 System.out.printf("輸入n個數:");15 for(i=0;i<n;i++)16 arr[i]=scanner.nextInt();17 18 for(i=0;i<n;i++)19 {20 for(j=0;j<n-1-i;j++)21 {22 if(arr[j]>arr[j+1])//每次總是與相鄰的元素進行交換23 {24 temp=arr[j];25 arr[j]=arr[j+1];26 arr[j+1]=temp;27 }28 }29 }30 31 for(i=0;i<n;i++)32 System.out.printf("%3d",arr[i]);33 System.out.printf("\n");34 }35 }
2、選擇法
從 i=0開始,把arr[i]與其後的每一個元素比較,把最小的元素放在當前位置。遞增 i,把餘下最小元素放在當前i位置,直至完成。
1 import java.util.Scanner; 2 class select 3 { 4 public static void main(String[] args) 5 { 6 int i,j,h; 7 int[] arr=new int[10000]; 8 int temp,n; 9 10 Scanner scanner=new Scanner(System.in);11 System.out.printf("輸入n=");12 n=scanner.nextInt();13 System.out.printf("輸入n個數:");14 for(i=0;i<n;i++)15 arr[i]=scanner.nextInt();16 17 for(i=0;i<n;i++)18 {19 h=i;20 for(j=i+1;j<n;j++)21 {22 if(arr[h]>arr[j])23 h=j;24 }25 if(i!=h) //i!=h時才需要交換,否則i的位置即是最小的26 {27 temp=arr[i];28 arr[i]=arr[h];29 arr[h]=temp;30 }31 }32 for(i=0;i<n;i++)33 System.out.printf("%3d",arr[i]);34 System.out.printf("\n");35 }36 }
3、插入排序
把待排序的元素插入已排序序列的合適位置。
1 import java.util.Scanner; 2 class insert 3 { 4 public static void main(String[] args) 5 { 6 int i,j; 7 int temp,n; 8 int[] arr=new int[10000]; 9 10 Scanner scanner=new Scanner(System.in);11 System.out.printf("輸入n=");12 n=scanner.nextInt();13 System.out.printf("輸入n個數:");14 for(i=0;i<n;i++)15 arr[i]=scanner.nextInt();16 17 for(i=0;i<n;i++)18 {19 temp=arr[i];20 for(j=i-1;j>=0 && arr[j]>temp;j--)//把當前元素arr[i]插入前面已排序的序列中。21 {22 arr[j+1]=arr[j];23 }24 arr[j+1]=temp;25 }26 27 for(i=0;i<n;i++)28 System.out.printf("%3d",arr[i]);29 System.out.printf("\n");30 }31 }
4、希爾排序
希爾排序通過調整步長 k 使得元素每一次移動的距離更長。步長 k 遞減,當k=1時,實際上即是插入排序法。
1 import java.util.Scanner; 2 class shell 3 { 4 public static void main(String[] args) 5 { 6 int i,j; 7 int temp,n,k; 8 int[] arr=new int[10000]; 9 10 Scanner scanner=new Scanner(System.in);11 System.out.printf("輸入n=");12 n=scanner.nextInt();13 System.out.printf("輸入n個數:");14 for(i=0;i<n;i++)15 arr[i]=scanner.nextInt();16 17 k=n/2;18 while(k>=1)//k=1時即是插入排序19 {20 for(i=k;i<n;i+=k)21 {22 temp=arr[i];23 for(j=i-k;j>=0 && arr[j]>temp;j-=k)24 { 25 arr[j+k]=arr[j];26 }27 arr[j+k]=temp;28 }29 k/=2;//步長遞減30 }31 32 for(i=0;i<n;i++)33 System.out.printf("%3d",arr[i]);34 System.out.printf("\n");35 }36 }
幾種常用排序演算法(bubble、select、insert、shell、未完待續)