已知数据序列为(12,5,9,20,6,31,24),对该数据序列进行排序,写出插入排序、冒泡排序、快速排序、简单选择排序、堆排序以及二路归并排序每趟的结果。

简介: 已知数据序列为(12,5,9,20,6,31,24),对该数据序列进行排序,写出插入排序、冒泡排序、快速排序、简单选择排序、堆排序以及二路归并排序每趟的结果。

已知数据序列为(12,5,9,20,6,31,24),对该数据序列进行排序,写出插入排序、冒泡排序、快速排序、简单选择排序、堆排序以及二路归并排序每趟的结果。

代码已经写好,自己运行一下就好啦

代码:

/**
 *作者:魏宝航
 *2080年14月45日,上午8:41
 */
package 八大排序;
import java.util.Arrays;
import java.util.Scanner;
public class 八大排序 {
  public static void main(String[] args) {
    int[] a=new int[] {12,5,9,20,6,31,24};
    System.out.println("冒泡排序:");
    bubbleSort(new int[] {12,5,9,20,6,31,24});
    System.out.println("选择排序:");
    chooseSort(new int[] {12,5,9,20,6,31,24});
    System.out.println("插入排序:");
    insertSrot(new int[] {12,5,9,20,6,31,24});
    System.out.println("希尔排序:");
    hillSort(new int[] {12,5,9,20,6,31,24});
    System.out.println("基数排序:");
    baseSort(new int[] {12,5,9,20,6,31,24});
    System.out.println("归并排序:");
    mergeSort(a, 0, a.length-1, new int[7]);
    System.out.println("快速排序:");
    quickSort(new int[] {12,5,9,20,6,31,24});
    System.out.println("堆排序:");
    heapSort(new int[] {12,5,9,20,6,31,24});    
  }
  //冒泡排序
  public static void bubbleSort(int [] a) {
    int i,j;
    for(i=0;i<a.length-1;i++) {
      for(j=0;j<a.length-i-1;j++)
        if(a[j]>a[j+1]) {
          int temp=a[j];
          a[j]=a[j+1];
          a[j+1]=temp;
        }
      System.out.println(Arrays.toString(a));
    }
  }
  //选择排序
  public static void chooseSort(int [] a) {
    int i,j;
    for(i=0;i<a.length;i++) {
      int min=a[i];
      int minindex=i;
      for(j=i+1;j<a.length;j++)
        if(a[j]<min) {
          min=a[j];
          minindex=j;
        }
      a[minindex]=a[i];
      a[i]=min;
      System.out.println(Arrays.toString(a));
    }
  }
  //插入排序
  public static void insertSrot(int [] a) {
    int i,j;
    for(i=1;i<a.length;i++) {
      j=i;
      int temp=a[j];
      if(a[j]<a[j-1]) {
        while(j-1>=0&&temp<a[j-1]) {
          a[j]=a[j-1];
          j--;
        }
        a[j]=temp;
      }
      System.out.println(Arrays.toString(a));
    }
  }
  //希尔排序
  public static void hillSort(int [] a) {
    int i,j;
    for(int gap=a.length/2;gap>0;gap/=2) {
      for(i=gap;i<a.length;i++) {
        j=i;
        int temp=a[j];
        if(a[j]<a[j-gap]) {
          while(j-gap>=0&&temp<a[j-gap]) {
            a[j]=a[j-gap];
            j-=gap;
          }
          a[j]=temp;
        }
      }
      System.out.println(Arrays.toString(a));
    }
  }
  //基数排序
  public static void baseSort(int [] a) {
    int i,j,k,n;
    int max=a[0];
    for(i=1;i<a.length;i++)
      if(a[i]>max)
        max=a[i];
    int maxlength=(max+"").length();
    int [][] bucket=new int [10][a.length];
    int [] bucketcount=new int [10];
    for(k=0,n=1;k<maxlength;k++,n*=10) {
      for(i=0;i<a.length;i++) {
        int dight=a[i]/n%10;
        bucket[dight][bucketcount[dight]]=a[i];
        bucketcount[dight]++;
      }
      int index=0;
      for(i=0;i<10;i++) {
        if(bucketcount[i]!=0) {
          for(j=0;j<bucketcount[i];j++) {
            a[index]=bucket[i][j];
            index++;
          }
        }
        bucketcount[i]=0;
      }
      System.out.println(Arrays.toString(a));
    }
  }
  //归并排序
  public static void merge(int [] a,int left,int mid,int right,int [] temp) {
    int i=left;
    int j=mid+1;
    int t=0;
    while(i<=mid&&j<=right) {
      if(a[i]<a[j]) {
        temp[t]=a[i];
        t++;
        i++;
      }
      else {
        temp[t]=a[j];
        t++;
        j++;
      }
    }
    while(i<=mid) {
      temp[t]=a[i];
      t++;
      i++;
    }
    while(j<=right) {
      temp[t]=a[j];
      t++;
      j++;
    }
    int templeft=left;
    t=0;
    while(templeft<=right) {
      a[templeft]=temp[t];
      templeft++;
      t++;
    }
  }
  public static void mergeSort(int [] a,int left,int right,int [] temp) {
    if(left<right) {
      int mid=(left+right)/2;
      mergeSort(a,left,mid,temp);
      mergeSort(a,mid+1,right,temp);
      merge(a,left,mid,right,temp);
      System.out.println(Arrays.toString(a));
    }
  }
  //快速排序
  public static void quickSort(int [] a) {
    if(a==null||a.length<=1)
      return;
    quickSort(a,0,a.length-1);
  }
  public static void quickSort(int [] a,int left,int right) {
    if(left>=right)
      return;
    int pivotindex=left+(int)(Math.random()*(right-left+1));
    swap(a,pivotindex,right);
    int i=left;
    int j=right-1;
    while(i<=j) {
      if(a[i]<=a[right])
        i++;
      else {
        swap(a,i,j);
        j--;
      }
    }
    swap(a,i,right);
    System.out.println(Arrays.toString(a));
    quickSort(a,left,i-1);
    quickSort(a,i+1,right);
  }
  public static void swap(int [] a,int x,int y) {
    int temp=a[x];
    a[x]=a[y];
    a[y]=temp;
  }
  //堆排序
  public static void heapSort(int[] a) {
    for(int i=a.length/2-1;i>=0;i--) {
      adjustHeap(a,i,a.length);
    }
    int temp;
    for(int j=a.length-1;j>0;j--) {
      temp=a[j];
      a[j]=a[0];
      a[0]=temp;
      adjustHeap(a,0,j);
      System.out.println(Arrays.toString(a));
    }
  }
  public static void adjustHeap(int[] a,int i,int length) {
    int temp=a[i];
    for(int k=i*2+1;k<length;k=k*2+1) {
      if(k+1<length&&a[k]<a[k+1]) {
        k++;
      }
      if(a[k]>temp) {
        a[i]=a[k];
        i=k;
        a[i]=temp;
      }else {
        break;
      }
    }
  }
}


目录
相关文章
|
5月前
|
存储 搜索推荐 算法
[数据结构]————排序总结——插入排序(直接排序和希尔排序)—选择排序(选择排序和堆排序)-交换排序(冒泡排序和快速排序)—归并排序(归并排序)
[数据结构]————排序总结——插入排序(直接排序和希尔排序)—选择排序(选择排序和堆排序)-交换排序(冒泡排序和快速排序)—归并排序(归并排序)
|
10月前
|
算法 搜索推荐 大数据
【算法】排序——归并排序和计数排序
上两篇文章讲解了插入排序、选择排序以及交换排序,每种类型的排序大类下都有一到两种排序,今天给大家带来的是归并排序,和前面几种排序一样都属于比较排序中的一种,是通过比较数组中的元素来实现排序的,还给大家带来一种非比较排序计数排序,让我们开始今天的排序之吧!!!
|
10月前
|
算法
【算法】排序——选择排序和交换排序(快速排序)
上篇文章讲述了插入排序及插入排序的优化希尔排序,今天我们继续给大家带来排序中的选择排序和交换排序,选择排序包括直接选择排序、 其中还包括堆排序,因为之前讲过堆排序,这篇文章就不多讲解,点击直达堆排序。交换排序包括冒泡排序、快速排序。让我们开始今天的选择排序之旅吧!!!
|
存储 搜索推荐 算法
七大排序 (9000字详解直接插入排序,希尔排序,选择排序,堆排序,冒泡排序,快速排序,归并排序)
七大排序 (9000字详解直接插入排序,希尔排序,选择排序,堆排序,冒泡排序,快速排序,归并排序)
85 0
【算法排序】直接插入排序
【算法排序】直接插入排序
|
算法 API
算法排序4——插入排序
每个元素要比较的是它之前的已排序的元素,并判断大小,所以再定义一个元素 j,从已排序组内从后往前比较;例如当 i = 5 的时候,其实是第6个位置,而 j = 5 的时候,由于从第一个开始计数,所以就表示第五个位置,恰好满足已排序组内的最后一个,终止值就是元素第一个
91 0
算法排序4——插入排序
|
算法 搜索推荐 API
算法排序3——选择排序
算法排序3——选择排序
109 0
算法排序3——选择排序
|
算法 API 索引
算法排序6——快速排序(分治思想)
对于左侧的数组数据,又可以取一个分界值,将该部分数据分成左右两部分,同样在左边放置较小值,右边放置较大值。右侧的数组数据也可以做类似处理
122 0
算法排序6——快速排序(分治思想)
|
移动开发 算法 Shell
算法之排序5——希尔排序
依次比较待插入元素 i 和分组内另一个元素,就需要用到for循环语句;当h = 5 时,a[5]恰好是数组内第6个元素,也就是第一个待插入的元素,所以初始条件是 i = h,待插入的最后一个元素就是数组内最后一个元素,即终止条件为 i < a.length
129 0
算法之排序5——希尔排序