国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

八大排序(復習)

2019-11-08 03:00:09
字體:
來源:轉載
供稿:網友

我要記一下: 堆排序 算法時間復雜度O(nlog n) 歸并排序 最好情況下還是在最壞情況下均是O(nlog2n) 快速排序 O(nlog2n),最壞O(n ^2)

其他為 O(n ^2)

1冒泡排序

public class bubbleSort { public static void main(String[] args) { int[] data = {11,2,5,6,7,14};// int[] data = {11,2}; sort(data); for (int i = 0; i < data.length; i++) { System.out.PRintln(data[i]); }} private static void sort(int[] data) { int temp = 0; int size = data.length; for(int i = 0;i < size - 1 ;i++){ for(int j = 0;j<size - 1 - i;j++){ if(data[j]>data[j+1]){ temp = data[j]; data[j] = data[j+1]; data[j+1] = temp; } } } }}

堆排序

public class heapsort { public static void main(String[] args) { int[] data = {11,2,5,6,7,14}; sort(data); for (int i = 0; i < data.length; i++) { System.out.println(data[i]); } } private static void sort(int[] data) { //從最后一個節點的父節點開始// buildMaxheap(data,); for(int i = 0;i < data.length-1;i++){ buildMaxheap(data,data.length-1-i); swap(data, 0, data.length-1-i); } } private static void buildMaxheap(int[] data, int lastindex) { //從最后的一個節點判定 for(int i = (lastindex -1 )/2 ;i>=0;i--){ int k = i; while(k*2+1<=lastindex){ //左右節點對比 int biggerIndex = 2 * k +1; if(biggerIndex < lastindex){ if(data[biggerIndex]<data[biggerIndex + 1]){ biggerIndex++; } } if(data[k]<data[biggerIndex]){ //交換他們之間的位置 swap(data, k, biggerIndex); //他的子節點繼續調整堆 k=biggerIndex; }else{ break; } } } } public static void swap(int[] data,int i,int j) { int temp = data[i]; data[i] = data[j]; data[j] = temp; }}

插入排序

public class insertsort { public static void main(String[] args) { int[] data = {11,2,5,6,7,14};// int[] data = {11,2}; sort(data); for (int i = 0; i < data.length; i++) { System.out.println(data[i]); } } public static void sort(int[] data){ int length = data.length; int index = 0; int temp = 0; for(int i = 0;i < data.length;i++){ temp = data[i]; for(index = i;index>0&&data[index-1]>temp;index--){ data[index] = data[index-1]; } data[index] = temp; } }}

歸并排序

public class mergeSort { public static void main(String[] args) { int[] data = {11,2,5,6,7,14};// int[] data = {11,2}; sort(data); for (int i = 0; i < data.length; i++) { System.out.println(data[i]); }} private static void sort(int[] data) { mergesort(data,0,data.length-1); } private static void mergesort(int[] data, int low, int high) { int mid = (low + high )/2; if(low < high){ mergesort(data,low,mid); mergesort(data,mid+1,high); merge(data,low,mid,high); } } public static void merge(int[] nums,int low,int mid,int high) { //做一個數組 int[] temp = new int[high - low +1]; int i = low;//左數組 int j = mid + 1; int k = 0; while(i <= mid&& j <= high){ if(nums[i]<nums[j]){ temp[k++] = nums[i++]; }else{ temp[k++] = nums[j++]; } } while(i <=mid){ temp[k++] = nums[i++]; } // while(j <=high){ temp[k++] = nums[j++]; } for(int k2 = 0;k2 < temp.length;k2++){ nums[k2+low] = temp[k2]; } }}

快速排序

public class quicksort { public static void main(String[] args) { int[] data = {11,2,5,6,7,14}; sort(data); for (int i = 0; i < data.length; i++) { System.out.println(data[i]); } } private static void sort(int[] data) { quickSort(data,0,data.length - 1); } private static void quickSort(int[] data , int low ,int high){ if(low < high){ int middle = getMiddle(data, low, high); quickSort(data, low, middle - 1); quickSort(data, middle+1, high); } } public static int getMiddle(int[] data ,int low,int high){ //快速排序 int temp = data[low]; while(low < high){ while(low < high && data[high] > temp){ high--; } data[low] = data[high]; while(low < high&& data[high] < temp){ low++; } data[high] = data[low]; } data[low] = temp; return low; }}

選擇排序

public class selectSort { public static void main(String[] args) { int[] data = {11,2,5,6,7,14};// int[] data = {11,2}; sort(data); for (int i = 0; i < data.length; i++) { System.out.println(data[i]); }} private static void sort(int[] data) { int length = data.length; int temp; int index = 0; for(int i = 0 ;i < length;i++){ //標記最小的下標 temp = data[i]; index = i; for(int j = i ; j < length;j++){ //如果比較 if(data[j]<temp){ temp = data[j]; index = j; } } temp = data[index] ; data[index] = data[i]; data[i] = temp; } }}

希爾排序

public class shellSort { public static void main(String[] args) { int[] data = {11,2,5,6,7,14};// int[] data = {11,2}; sort(data); for (int i = 0; i < data.length; i++) { System.out.println(data[i]); }} //使用希爾排序 需要用到步長 private static void sort(int[] data) { int index; int temp ; int j;// int increment; //利用步長來判斷 for(int increment = data.length/2;increment > 0;increment/=2){// temp = data[] for (int i = 0; i < data.length; i++) { //取得 temp = data[i]; //對應組來對比 for( j = i ;j >= increment;j-=increment){ if(temp < data[j - increment]){ data[j] = data[j - increment]; }else{ break; } } data[j] = temp; } } }}
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 普定县| 武夷山市| 柳江县| 中西区| 开远市| 阳高县| 余江县| 闽侯县| 宝应县| 广德县| 斗六市| 拉萨市| 阳朔县| 龙岩市| 普定县| 明星| 璧山县| 阿合奇县| 北宁市| 福建省| 正阳县| 赤城县| 巴塘县| 长沙县| 瓮安县| 桐庐县| 大名县| 浏阳市| 南澳县| 平塘县| 岳阳市| 永清县| 普格县| 郑州市| 本溪市| 昆明市| 达孜县| 湘西| 汉沽区| 平山县| 格尔木市|