冒泡排序
基本思想:在要排序的一組數中,對當前還未排好序的范圍內的全部數,自上而下對相鄰的兩個數依次進行比較和調整,讓較大的數往下沉,較小的往上冒。 即:每當兩相鄰的數比較后發現它們的排序與排序要求相反時,就將它們互換。 第一次比較排序的結果:會把其中最大的數據排到最大的索引處 第二次比較排序后的結果:因為第一次已經把最大的一個數據放到了最大的索引的地方,所以這次要進行比較的數據比數組里面的元素的數據個數-1個,而第二大的數據也會排到第二大的索引處 第三次比較排序的結果:跟第二次差不多,只是這次要進行比較的數據比數組里面的元素的數據個數還少了2個, 第四次:少3個... 綜上所述,要使數組里面的數據按照從小到大排序,總的比較的次數會比數組的長度-1次,而隨著比較的次數的增加,每次要進行比較的數據依次減少。
public class Demo4 { public static void main(String[] args) { int number[]={49,38,65,97,76,13,27,14,10}; for(int i=0;i<number.length-1;i++){ for(int j=0;j<number.length-1-i;j++){ if(number[j]>number[j+1]){ int tmp=number[j]; number[j]=number[j+1]; number[j+1]=tmp; } } for (int j = 0; j < number.length; j++) { System.out.PRint(number[j]+"/t"); } System.out.println("排序"+(i+1)+"次后的結果"); } }}選擇排序基本方法:從0索引開始,依次和后面元素比較,小的往前放,第一次完畢,最小值出現在了最小索引處,第二次找到第二小的值。具體是如何實現呢?首先第一輪是0索引上的數據依次跟后面各個索引上的數據進行比較,直到遇到一個比它小的數據,這時候,這個小的數據就替換掉0索引上原來的數據,接著這個替換掉的數據繼續跟它原來的索引位置的后面的索引上的數據進行比較也就是說,進行完第一輪后,0索引上的數據肯定是這個數組上最小的數據第二輪接著就是1索引上的數據來跟后面的數據進行比較,這個時候參與比較的數據比原來少了一個第三輪又會少一個,這樣循環一輪j的值就會+1,也就是j開始的索引下標+1。
public class Demo5 { public static void main(String[] args) { int number[]={49,38,65,97,76,13,27,14,10}; for(int i=0;i<number.length;i++){ for(int j=i+1;j<number.length;j++){ if(number[i]>number[j]){ int tmp=number[i]; number[i]=number[j]; number[j]=tmp; } } for (int j = 0; j < number.length; j++) { System.out.print(number[j]+"/t"); } System.out.println("第"+(i+1)+"次排序后的結果"); } }}插入排序插入排序就是把當前待排序的元素插入到一個已經排好序的列表里面。 一個非常形象的例子就是右手抓取一張撲克牌,并把它插入左手拿著的排好序的撲克里面。 插入排序的最壞運行時間是O(n2), 所以并不是最優的排序算法。 如果輸入數組已經是排好序的話,插入排序出現最佳情況,其運行時間是輸入規模的一個線性函數。 如果輸入數組是逆序排列的,將出現最壞情況。平均情況與最壞情況一樣,其時間代價是Θ(n2)。
public class Demo6 { public static void main(String[] args) { //定義一個整型數組 int[] nums = new int[]{4,3,-1,9,2,1,8,0,6}; //打印沒有進行排序的數組 System.out.println("沒有排序之前的結果:" + Arrays.toString(nums)); for(int index=0; index<nums.length; index++) { //獲得需要插入的數值 int key = nums[index]; //取得下標值 int position = index; //循環比較之前排序好的數據,找到合適的地方插入 while(position >0 && nums[position-1] > key) { nums[position] = nums[position-1]; position--; } nums[position] = key; } //打印排序后的結果 System.out.println("排序后的結果:" + Arrays.toString(nums)); } }
新聞熱點
疑難解答