算法练习day2——190319(大顶堆、冒泡、选择、插入)
生活随笔
收集整理的這篇文章主要介紹了
算法练习day2——190319(大顶堆、冒泡、选择、插入)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1.實現大頂堆,用于排序
步驟:
2.冒泡排序
public class BubbleSort {public static void bubbleSort(int[] arr) {if(arr==null||arr.length<2)return;for(int end=arr.length-1;end>0;end--) {//end為每次比較的范圍//第一次比:0~n-1//第二次比:0~n-1//...for(int i=0;i<end;i++) {if(arr[i]>arr[i+1])swap(arr,i,i+1);}}}public static void swap(int[] arr,int i,int j) {int temp=arr[i];arr[i]=arr[j];arr[j]=temp;} }時間復雜度的計算:
第一次:0~n-1——n次
第二次:0~n-2——n-1次
...
總共:
3.選擇排序
第一次比較0~n-1,最小的放在0位置;
第二次比較1~n-1,最小的放在1位置;
...
public class SelectSort {public static void selectSort(int[] arr) {if(arr==null||arr.length<2)return;for(int i=0;i<arr.length;i++) {int minIndex=i;//最小數的下標for(int j=i+1;j<arr.length;j++) {minIndex=arr[minIndex]<arr[j]?minIndex:j;}if(minIndex!=i)swap(arr,i,minIndex);//最小數和目前i位置的交換}}public static void swap(int[] arr,int i,int j) {int temp=arr[i];arr[i]=arr[j];arr[j]=temp;} }時間復雜度還是
冒泡排序和選擇排序在工程上不怎么用。
它們的比較流程已確定,和元素具體是什么情況無關,都得比較,有序的話只是不交換而已。
4.插入排序
public class InsertSort {public static void insertSort(int[] arr) {if(arr==null||arr.length<2)return;for(int i=1;i<arr.length-1;i++) {//每次插入的元素for(int j=i-1;j>-1;j--)//每次需要比較的元素if(arr[j]<arr[j+1]) {swap(arr,j,j+1);}}}public static void swap(int[] arr,int i,int j) {int temp=arr[i];arr[i]=arr[j];arr[j]=temp;/*位運算實現交換* arr[i]=arr[i]^arr[j];* arr[j]=arr[i]^arr[j];* arr[i]=arr[i]^arr[j];*/} }分最好、最壞和平均。
最好:已有序,且和要求的順序一致;每次只需和最后一個元素比較,
平均:亂序;
最壞:有序,但和要求順序相反。每次都需要比較到頭,
?
?
總結
以上是生活随笔為你收集整理的算法练习day2——190319(大顶堆、冒泡、选择、插入)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 算法练习day3——190320(对数器
- 下一篇: 算法练习day1——190318(二分查