import java.util.Scanner;
import java.util.Arrays;
public class MainSort {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int[] arr = Arrays.stream(sc.nextLine().split(" ")).mapToInt(Integer::valueOf).toArray();
Solution so = new Solution();
so.printArr(arr);
so.heapSort(arr);
so.printArr(arr);
}
}
class Solution {
/***
* 冒泡排序
* @param arr
*/
public void bubbleSort(int[] arr) {
if(arr==null || arr.length==0) {
return;
}
for(int j=arr.length-1;j>0;j--) {
for(int i=0;i<j;i++) {
if(arr[i]>arr[i+1]) {
int temp = arr[i];
arr[i] = arr[i+1];
arr[i+1] = temp;
}
}
}
}
/****
* 快速排序
* @param arr
* @param start
* @param end
*/
public void quickSort(int[] arr,int start,int end) {
int i = start;
int j = end;
if(i>=j) {
return;
}
int baseIndex = i;
while(i<j) {
while(i<j && arr[j]>=arr[baseIndex]) {
j--;
}
while(i<j && arr[i]<=arr[baseIndex]) {
i++;
}
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
int temp = arr[baseIndex];
arr[baseIndex] = arr[i];
arr[i] = temp;
quickSort(arr,start,i-1);
quickSort(arr,i+1,end);
}
/***
* 歸并排序
* @param arr
* @param start
* @param end
*/
public void mergeSort(int[] arr, int start, int end) {
if(start>=end) {
return;
}
int mid = (start+end)/2;
mergeSort(arr,start,mid);
mergeSort(arr,mid+1,end);
merge(arr,start,mid,end);
}
private void merge(int[] arr, int start, int mid, int end) {
int[] temp = new int[end-start+1];
int i = start;
int j = mid+1;
int index = 0;
while(i<=mid && j<=end) {
if(arr[i]<=arr[j]) {
temp[index++] = arr[i++];
}else {
temp[index++] = arr[j++];
}
}
while(i<=mid) {
temp[index++] = arr[i++];
}
while(j<=end) {
temp[index++] = arr[j++];
}
for(i=0;i<temp.length;i++) {
arr[start+i] = temp[i];
}
}
/***
* 堆排序
* @param arr
*/
public void heapSort(int[] arr) {
for(int i=arr.length-1;i>=0;i--) {
adjust(arr,i,arr.length);
}
for(int i=arr.length-1;i>=0;i--) {
int temp = arr[i];
arr[i] = arr[0];
arr[0] = temp;
adjust(arr,0,i);
}
}
private void adjust(int[] arr, int root, int len) {
int left = root*2 + 1;
int right = root*2 + 2;
int maxIndex = root;
if(left<len && arr[left]>arr[maxIndex]) {
maxIndex = left;
}
if(right<len && arr[right]>arr[maxIndex]) {
maxIndex = right;
}
if(maxIndex!=root) {
int temp = arr[maxIndex];
arr[maxIndex] = arr[root];
arr[root] = temp;
adjust(arr,maxIndex,len);
}
}
public void printArr(int[] arr) {
if(arr==null || arr.length==0) {
return;
}
for(int i=0;i<arr.length-1;i++) {
System.out.print(arr[i]+"-->");
}
System.out.println(arr[arr.length-1]+System.lineSeparator());
}
}
排序算法
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
相關(guān)閱讀更多精彩內(nèi)容
- 選擇排序 對(duì)于任何輸入,時(shí)間為O(n*n); 冒泡排序 最優(yōu)(對(duì)于升序的數(shù)組,因?yàn)榧尤肓艘粋€(gè)跳出判斷):O(n),...
- 最近在復(fù)習(xí)經(jīng)典排序算法,自己用python也實(shí)現(xiàn)了一下,這里不會(huì)涉及到原理(因?yàn)榫W(wǎng)上方法已經(jīng)很詳細(xì)啦),就把函數(shù)貼...
- 冒泡排序(Bubble Sort,臺(tái)灣譯為:泡沫排序或氣泡排序)是一種簡(jiǎn)單的排序算法。它重復(fù)地走訪(fǎng)過(guò)要排序的數(shù)列,...
- 或許是太輕視這份工作,或許真的沒(méi)上心過(guò),今天釀大禍了,將不確認(rèn)的貨裝上了柜,結(jié)果不得不奔赴江蘇去淘柜,估計(jì)給...