日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

八大排序:Java实现八大排序及算法复杂度分析

發布時間:2024/7/5 java 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 八大排序:Java实现八大排序及算法复杂度分析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

?

QUESTION:八大排序:Java實現八大排序及算法復雜度分析

ANSWER:

一:冒泡排序

1.算法分析

2.時間復雜度分析

3.代碼

二:選擇排序

1.算法分析

2.時間復雜度分析

3.代碼

三:插入排序

1.算法分析

2.時間復雜度分析

3.代碼

四:歸并排序

1.算法分析

2.時間復雜度分析

3.代碼

五:堆排序

1.算法分析

2.時間復雜度分析

3.代碼

六:快速排序

1.算法分析

2.時間復雜度分析

3.代碼


QUESTION:八大排序:Java實現八大排序及算法復雜度分析

ANSWER:

一:冒泡排序

1.算法分析

冒泡排序是對于一個數組,從第一個數開始,與下一個數進行比較,大的冒后面,小的冒前面,相鄰元素依次比較,完成一次循環,繼續下一次循環,直至數組有序。

圖示:

2.時間復雜度分析

由于冒泡排序是兩層for循環,所以T=O(n^2)。

3.代碼

*** 冒泡排序*/ public class BubbleSort {public static void swap(int[] arr, int i, int j) {int tmp = arr[i];arr[i] = arr[j];arr[j] = tmp;}/*** 比較相鄰元素大小,每次縮減一* @param arr*/public static void bubbleSort(int []arr){if (arr==null){return;}for (int i = arr.length-1; i >0 ; i--) {for (int j = 0; j <i ; j++) {if (arr[j]>arr[j+1]){swap(arr,j,j+1);}}}} }

?

?

二:選擇排序

1.算法分析

選擇排序是選擇數組第一個元素假設為最小元素,與后面的所以元素比較,比其它元素大就交換位置,完成一次循環就從第二個元素開始依次上述過程比較,直至數組有序。

圖示:

2.時間復雜度分析n^

由于選擇排序兩層for循環,所以T=O(n^2)。

3.代碼

/*** 選擇排序*/ public class SelectionSort {public static void swap(int[] arr, int i, int j) {int tmp = arr[i];arr[i] = arr[j];arr[j] = tmp;}/*** 假設第一個值為最小元素,每次循環與后一個元素比較找到最小元素* @param arr*/public static void selectionSort(int []arr){if (arr==null){return;}for (int i = 0; i <arr.length-1 ; i++) {int min=i;for (int j = i+1; j <arr.length ; j++) {min=arr[j]<arr[min]?j:min;}swap(arr,i,min);}} }

?

?

三:插入排序

1.算法分析

插入排序是從數組第二個元素開始,找前面的數,比較大小,如果前面的數大,就交換位置,然后繼續向前比較,。每次從第幾個元素開始遍歷時都把較小的元素插入到該元素前面,使其前面數組有序,完成一次循環,繼續循環下一個元素直至數組有序。

圖示:

2.時間復雜度分析

由于插入排序兩層for循環,T=O(n^2)。

3.代碼

public class InsertionSort {public static void swap(int[] arr, int i, int j) {int tmp = arr[i];arr[i] = arr[j];arr[j] = tmp;}public static void insertionSort(int []arr){if (arr==null){return;}for (int i = 1; i <arr.length ; i++) {for (int j = i-1; j>=0&&arr[j]>arr[j+1]; j--) {swap(arr,j,j+1);}}} }

?

?

四:歸并排序

1.算法分析

歸并排序是利用二分的思想,不斷的將數組進行分割為兩部分,依次比較每部分的最小元素,將最小的元素放入輔助數組,直到所有元素都插入數組,完成排序。

圖示:

2.時間復雜度分析

由于歸并排序是合并的思想,所有T=O(n*logn)。

3.代碼

public class MergeSort {/*** 將數組分段排序插入,然后歸并排序* @param arr* @param l* @param m* @param r*/public static void merge(int []arr,int l,int m,int r){int []help=new int[r-l+1];int i=0;int p1=l;int p2=m+1;while (p1<=m&&p2<=r){help[i++]=arr[p1]<=arr[p2]?arr[p1++]:arr[p2++];}while (p1<=m){help[i++]=arr[p1++];}while (p2<=r){help[i++]=arr[p2++];}for (int j = 0; j <help.length ; j++) {arr[j+l]=help[j];}}/*** 遞歸進行分段歸并* @param arr* @param l* @param r*/public static void mergeSort(int []arr,int l,int r){if (l>=r){return;}int mid=((r-l)>>1)+l;mergeSort(arr,l,mid);mergeSort(arr,mid+1,r);merge(arr,l,mid,r);}/*** 數組歸并排序*/public static void mergeSort(int []arr){if (arr==null){return;}mergeSort(arr,0,arr.length-1);} }

?

?

五:堆排序

1.算法分析

堆排序的思想是根據二叉樹的大根堆和小根堆的概念形成,首先依照數組建立大根堆,之后為了防止某一個元素的變化而引起整個大根堆的變化,建立一個修改二叉樹為大根堆的方法,該數組保持大根堆的排序。之后交換大根堆元素,得到有序數組。

圖示:

2.時間復雜度分析

堆排序建立大根堆的過程,T=O(n*logn)。

3.代碼

/*** 堆排序,大根堆,小根堆*/ public class HeapSort{/*** 建立大根堆,當孩子結點大于根結點進行交換,沒有進行左右孩子結點的比較* @param arr* @param index*/public static void heapInsert(int []arr,int index){while(arr[index]>arr[(index-1)/2]){swap(arr,index,(index-1)/2);index=(index-1)/2;}}/*** 修改數組為大根堆* @param arr* @param index* @param size*/public static void heapModifiy(int []arr,int index,int size){int left=2*index+1;while(left<size){//兄弟之間結點排序int largest=arr[left+1]>arr[left]&&(left+1)<size?left+1:left;//孩子結點與根結點進行比較largest=arr[index]>arr[largest]?index:largest;if (largest==index) {break;}swap(arr,index,largest);index=largest;left=2*index+1;}}/*** 堆排序* @param arr*/public static void heapSort(int []arr){if (arr==null||arr.length==0) {return;}for (int i=0;i<arr.length ;i++ ) {heapInsert(arr,i);}int size=arr.length;swap(arr,0,--size);while(size>0){heapModifiy(arr,0,size);swap(arr,0,--size);}}public static void swap(int[] arr, int i, int j) {int tmp = arr[i];arr[i] = arr[j];arr[j] = tmp;} }

?

六:快速排序

1.算法分析

快速排序的基本思想是有荷蘭國旗問題的相似,先是隨機產生一個范圍進行數組的劃分,小于區域在左邊,等于區域在中間,等于區域在右邊,直至數組完成排序。

圖示:

2.時間復雜度分析

快速排序T=O(n*logn)。

3.代碼

/*** 快速排序*/ public class QuickSort {/***給定范圍劃分大于區域,等于區域,小于區域排序* @param arr* @param l* @param r* @return*/public static int[] partition(int[] arr, int l, int r) {int less = l - 1;int more = r;while (l < more) {if (arr[l] < arr[r]) {swap(arr,++less,l++);}else if (arr[l]==arr[r]){l++;}else{swap(arr,--more,l);}}swap(arr,more,r);return new int[]{less+1,more};}/*** 產生一個隨機范圍進行劃分排序* @param arr* @param l* @param r*/public static void quickSort(int []arr,int l,int r){if (l<r){swap(arr, l+(int) (Math.random()*(r-l+1)),r);int []partition=partition(arr,l,r);quickSort(arr,l,partition[0]-1);quickSort(arr,partition[1]+1,r);}}/*** 快速排序* @param arr*/public static void quickSort(int []arr){if (arr==null){return;}quickSort(arr,0,arr.length-1);}public static void swap(int[] arr, int i, int j) {int tmp = arr[i];arr[i] = arr[j];arr[j] = tmp;} }

?

?

?

?

總結

以上是生活随笔為你收集整理的八大排序:Java实现八大排序及算法复杂度分析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 精品国产一二三 | 久久思| 国产一级片免费视频 | 天堂网在线中文 | 国产老熟女一区二区三区 | 色综合天 | 在线视频免费播放 | 国产内射一区二区 | 久久久久久久久久久99 | 日韩一级片中文字幕 | 欧美wwwwww| 在线激情小视频 | 啪啪视屏 | 婷婷激情影院 | 深爱五月综合网 | 午夜嘿嘿嘿 | 亚洲一区二区电影网 | 免费操人视频 | 国产sm网站| 精品人妻一区二区三区免费 | 精精国产xxxx视频在线 | 17c国产精品一区二区 | 久久久999精品视频 国产在线xx | 综合xx网 | 日韩av在线免费播放 | 波多野结衣视频在线观看 | 久久久精品久久久久久 | 国产一区二区三区四区视频 | 久久久久国 | 清纯唯美亚洲色图 | 国产精品一级视频 | 色亚洲色图 | 91免费观看入口 | 国产一区二区三区电影在线观看 | 日韩精品大片 | 国产小视频在线观看免费 | 99re在线观看 | 成人欧美一区 | 青草青草视频 | 锕锕锕锕锕锕锕锕 | 亚洲美女在线视频 | √天堂资源地址在线官网 | 国产自产在线视频 | 91偷拍一区二区三区精品 | 91网站视频在线观看 | 亚洲久久久久 | 麻豆精品国产传媒av绿帽社 | 欧美日韩视频无码一区二区三 | 欧美一级一区 | 日韩图片一区 | 日韩日日日 | 91操视频| 成人一区二区三区仙踪林 | 黄色免费网站在线观看 | 日韩欧美精品久久 | 日韩激情成人 | 欧美日韩高清在线播放 | 99国产精品久久久久久久成人 | 一级黄色免费大片 | 亚洲一级黄色大片 | 国产视频观看 | 久久精品欧美一区二区 | 久久久www成人免费无遮挡大片 | 苍井空张开腿实干12次 | 69视频免费在线观看 | 亚洲一级免费视频 | 都市激情校园春色亚洲 | 伊人久久网站 | 日韩女优在线视频 | 男女性生活视频网站 | 日本在线免费播放 | 国产h视频在线 | 丝袜熟女一区二区 | 美女又爽又黄免费视频 | 国产地址一 | 在线黄av | 久久精工是国产品牌吗 | 一个人免费在线观看视频 | 免费av免费看 | 日本一区二区三区在线播放 | 亚洲第一天堂久久 | 91高清视频在线观看 | 国产三区在线观看 | 给我免费观看片在线电影的 | 爱爱短视频| 天天透天天干 | 天堂av最新网址 | 亚洲日本黄色 | 亚洲激情欧美 | 国产大片在线观看 | 国产大片b站 | 日韩熟女一区二区 | 亚洲国产精品毛片 | 91成年视频 | 亚洲精品乱码久久久久久蜜桃不卡 | 精品久久久久亚洲 | 成年人黄色网址 | 国产在线1区 | 国模精品视频一区二区 |