6大经典排序算法(java) 实现
分别为 冒泡排序 快速排序 选择排序 插入排序 希尔排序 堆排序
import com.sun.org.apache.xerces.internal.impl.xpath.regex.Match;
import java.util.Random;
import java.util.Scanner;
public class Sort {
//冒泡排序
public void maopo(int a[]) {
long StartTime = System.currentTimeMillis();
int temp2 = 0;
for (int i = 0; i < a.length - 1; i++) {
for (int j = 0; j <= a.length - 2; j++) {
if (a[j] > a[j + 1]) {
temp2 = a[j];
a[j] = a[j + 1];
a[j + 1] = temp2;
}
}
}
long EndTime = System.currentTimeMillis();
System.out.println("代码运行时间:" + (EndTime - StartTime) + "ms"); //输出程序运行时间
if (a.length < 100) {
for (Object o : a) {
System.out.print(o + " ");
}
}
}
//快速排序
public void quicksort(int a[], int left, int right) {
if (left > right) {
return;
}
int base = a[left];
int i = left;
int j = right;
while (i != j) {
while (a[j] >= base && i < j) {
j--;
}
while (a[i] <= base && i < j) {
i++;
}
if (i < j) {
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
a[left] = a[i];
a[i] = base;
quicksort(a, left, j - 1);
quicksort(a, j + 1, right);
}
//选择排序
public void selectsort(int a[]){
for (int i=0;i<a.length-1;i++){
int min=i;
for (int j=i+1;j<a.length;j++){
if (a[j]<=a[min]){
min=j;
}
}
int temp=a[i];
a[i]=a[min];
a[min]=temp;
}
if (a.length<100){
for(Object o:a){
System.out.print(o+" ");
}
}
}
//插入排序
public void insertsort(int a[]){
for (int i=1;i<a.length;i++){
for (int j=i;j>0;j--){
if (a[j]<a[j-1]){
int temp=a[j-1];
a[j-1]=a[j];
a[j]=temp;
}
}
}
if (a.length<100){
for (Object o:a
) {
System.out.print(o+" ");
}
}
}
//希尔排序
public void shellsort(int a[]){
for (int step=a.length/2;step>0;step=step/2){
for (int i=step;i<a.length;i++){
for (int j=i-step;j>=0;j--){
if (a[j]>a[j+step]){
int temp=a[j+step];
a[j+step]=a[j];
a[j]=temp;
}
}
}
}
if(a.length<100){
for (Object o:
a) {
System.out.print(o+" ");
}
}
}
//堆排序
public void heapsort(int a[]){
int fatherNode=(a.length-1)/2;
for (int i=fatherNode;i>=0;i--){
maxHeap(a,a.length,i);
}
//最后一个跟第一个调整
for (int i=a.length-1;i>0;i--){
int temp=a[0];
a[0]=a[i];
a[i]=temp;
maxHeap(a,i,0);
}
if (a.length<100){
for (Object o:a){
System.out.print(o+" ");
}
}
}
private void maxHeap(int[] a, int length, int fatherNode) {
//左子节点
int leftNode=2*fatherNode+1;
int rightNode=2*fatherNode+2;
int max=fatherNode;
//在左右节点分别找出最大的
if (leftNode<length&&a[leftNode]>a[max]){
max=leftNode;
}
if (rightNode<length&&a[rightNode]>a[max]){
max=rightNode ;
}
if (max!=fatherNode){
int temp=a[fatherNode];
a[fatherNode]=a[max];
a[max]=temp;
maxHeap(a,length,max);
}
}
//生成数组
public int[] RandomNumber() {
System.out.print("请输入需要排序的个数:");
int inputNumber = new Scanner(System.in).nextInt();
int a[] = new int[inputNumber];
int i = 0;
while (i < inputNumber) {
a[i] = new Random().nextInt(inputNumber);
i++;
}
if (a.length < 100) {
for (Object o : a) {
System.out.print(o + " ");
}
}
return a;
}
public static void main(String[] args) {
Sort sort = new Sort();
int[] a = sort.RandomNumber();
System.out.println();
System.out.println("1 冒泡排序 2 快速排序 3 选择排序 4 插入排序 5 希尔排序 6堆排序 请选择:");
int select = new Scanner(System.in).nextInt();
switch (select) {
case 1:
sort.maopo(a);
break;
case 2:
long StartTime = System.currentTimeMillis();
sort.quicksort(a, 0, a.length - 1);
long EndTime = System.currentTimeMillis();
System.out.println("代码运行时间:" + (EndTime - StartTime) + "ms"); //输出程序运行时间
if (a.length < 100) {
for (Object o : a) {
System.out.print(o + " ");
}
}
break;
case 3:
long StartTime2 = System.currentTimeMillis();
sort.selectsort(a);
long EndTime2 = System.currentTimeMillis();
System.out.println("代码运行时间:" + (EndTime2 - StartTime2) + "ms"); //输出程序运行时间
break;
case 4:
long StartTime3 = System.currentTimeMillis();
sort.insertsort(a);
long EndTime3 = System.currentTimeMillis();
System.out.println("代码运行时间:" + (EndTime3 - StartTime3) + "ms"); //输出程序运行时间
break;
case 5:
long StartTime4 = System.currentTimeMillis();
sort.shellsort(a);
long EndTime4 = System.currentTimeMillis();
System.out.println("代码运行时间:" + (EndTime4 - StartTime4) + "ms"); //输出程序运行时间
case 6:
long StartTime5 = System.currentTimeMillis();
sort.heapsort(a);
long EndTime5 = System.currentTimeMillis();
System.out.println("代码运行时间:" + (EndTime5 - StartTime5) + "ms");
}
}
}
欢迎各位一起交流