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());
}
}
排序算法
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
相关阅读更多精彩内容
- 选择排序 对于任何输入,时间为O(n*n); 冒泡排序 最优(对于升序的数组,因为加入了一个跳出判断):O(n),...
- 最近在复习经典排序算法,自己用python也实现了一下,这里不会涉及到原理(因为网上方法已经很详细啦),就把函数贴...
- 冒泡排序(Bubble Sort,台湾译为:泡沫排序或气泡排序)是一种简单的排序算法。它重复地走访过要排序的数列,...