`
whnuliba
  • 浏览: 570 次
社区版块
存档分类
最新评论

常见排序

 
阅读更多
package sort;

public class SOrton {
public static void main(String[] args) {
int [] arrs = {6,1,2,7,9,3,4,5,10,8,3,4,6,10,43,2,12,66,66,1,77};
long a =System.currentTimeMillis();
//quickSort(arrs,0,arrs.length-1);
//bubbleSort(arrs);
//insertSort(arrs);
///selectSort(arrs);
mergeSort(arrs,0,arrs.length-1);
//shellSort(arrs,arrs.length);
long b =System.currentTimeMillis();
System.out.println("耗时 :"+(b-a));
for(int i = 0;i<arrs.length;i++) {
System.out.print(arrs[i]+" ");
}
}
/**
* 归并排序 (需要使用递归)
* @param arrs
* @param start 数组开始
* @param end 数组结束
*/
public static void mergeSort(int [] arrs,int start,int end) {
  if(start<end) {
int mid = (end+start)/2;
mergeSort(arrs,start,mid);
mergeSort(arrs,mid+1,end);
merge(arrs,start,mid,end);
}
}
/**
*
* @param arrs
* @param left 序列数组开始
* @param mid  中间
* @param right 结束 如 [left,..mid] [mid+1,..right]
* [1,2] [3,4,5,6]  通过检测tmp =[1,2,..]
* 由于还有[3,4,5,6]没有参与检测 直接合并到 tmp={1,2,3,4,5,6}
*/
public static void merge(int arrs [] ,int left ,int mid,int right) {
      int [] tmp = new int[arrs.length];//申请临时数组
      int p1 = left,p2=mid+1,k=left;
      while(p1<=mid && p2<=right) {
      if(arrs[p1]<arrs[p2])
      tmp[k++]=arrs[p1++];
      else
      tmp[k++]=arrs[p2++];
      }
      //还有没有检测比较的数据 直接 加在数组的后面(合并)
  while(p1<=mid)
  tmp[k++]=arrs[p1++];
  while(p2<=right)
  tmp[k++]=arrs[p2++];
        //复制回原素组
        for (int i = left; i <=right; i++)
        arrs[i]=tmp[i];
}
/***
* 希尔排序
* @param arrs
* @param size
*/
public static void shellSort(int [] arrs,int size) {
if(size ==1)
return;
int s = size/2;
for(int i=s;i<arrs.length;i+=s) {
  int j=i;
  while(j>=s && arrs[j]<arrs[j-s]) {
  int tmp =arrs[j];
  arrs[j]=arrs[j-s];
  arrs[j-s]=tmp;
  j-=s;
  }
}
shellSort(arrs,s);
}
/**
* 选择排序
* @param arrs
*/
public static void selectSort(int [] arrs) {
for(int i=0;i<arrs.length;i++) {
for(int j = i+1;j<arrs.length;j++) {
if(arrs[i]>arrs[j]) {
  int tmp =arrs[j];
  arrs[j]=arrs[i];
  arrs[i]=tmp;
}
}
}
}
/***
   * 插入排序
   * @param arrs
   */
  public static void insertSort(int arrs []) {
  for(int i=1;i<arrs.length;i++) {
  int j=i;
  while(j>=1 && arrs[j]<arrs[j-1]) {
  int tmp =arrs[j];
  arrs[j]=arrs[j-1];
  arrs[j-1]=tmp;
  j--;
  }
  }
  }
/***
* <h1>快速排序<h1>
* @param arrs
* @param left 开始的索引
* @param right 结束的索引
*
* 注意  只能从基数的对面开始 否则 如6,1,2,7,9  -->7,6,1,2,9 错误的结果
*
* 思想 :
* <br>
* 1、从由开始遍历,找到一个小于基数的则停下 i
* <br>
* 2、从左开始 找到大于基数的停止j
* <br>
* 3、  交换i和j
* <br>
* 4、若i==j 则 交换基数和i的值
* <br>
* 5、重复1-4
*
*/
  public static void quickSort(int [] arrs,int left,int right) {
  //选择一个数作为轴值
  if(left>right)
  return;
  int key = arrs[left],i = left,j = right;
  while(i!=j) {
  while(key<=arrs[j] && i<j)
    j--;
  while(key>=arrs[i] && i<j)
        i++;
  if(i<j) {
  int tmp = arrs[i];
  arrs[i]=arrs[j];
  arrs[j]=tmp;
  }
  }
  arrs[left] = arrs[i];
  arrs[i]=key;
 
  quickSort(arrs,left,i-1);
  quickSort(arrs,i+1,right);
  }
  /**
   * <h1>冒泡排序<h1>
   * @param arrs
   */
  public static void bubbleSort(int arrs[]) {
  for(int i=0;i<arrs.length;i++) {
  for(int j = arrs.length-1;j>i;j--) {
  if(arrs[j]<arrs[j-1]) {
  int tmp = arrs[j];
  arrs[j]=arrs[j-1];
  arrs[j-1]=tmp;
  }
  }
  }
  }
}
分享到:
评论

相关推荐

    java实现数据结构常见排序算法及详解

    ### Java 实现数据结构常见排序算法及详解 #### 排序算法概述 排序算法是计算机科学中的基础概念之一,主要用于将一系列数据按照特定规则进行排列。根据数据处理方式的不同,排序算法大致分为两大类:比较排序与非...

    C语言常见排序算法的实现

    这里我们将深入探讨在C语言中实现的六种常见排序算法:插入排序、Shell排序、堆排序、冒泡排序、快速排序以及归并排序。 1. **插入排序**:插入排序是一种简单的排序算法,它的工作原理类似于我们日常生活中的整理...

    七种常见排序算法动态演示图.rar

    以下是对七种常见排序算法的详细解释: 1. **冒泡排序**:冒泡排序是最基础的排序算法之一,其工作原理是通过不断地交换相邻的逆序元素,使得最大的元素逐渐“冒”到数组的末尾。该过程会重复进行,直到所有元素都...

    Java实现几种常见排序方法

    ### Java 实现几种常见排序方法 #### 泡泡排序(Bubble Sort) 泡泡排序是一种简单的排序算法,它重复地遍历待排序的数列,依次比较相邻的两个元素,如果它们的顺序错误就把它们交换过来。遍历数列的工作是重复...

    常见排序算法的实现与性能比较

    ### 常见排序算法的实现与性能比较 #### 实验背景及目的 排序算法是计算机科学中的一个重要组成部分,广泛应用于各种数据处理场景之中。通过本实验,我们旨在实现六种常见的排序算法——合并排序、插入排序、希尔...

    常见排序算法汇总

    【交换排序】 交换排序是基于比较对象之间大小关系,通过交换元素位置来达到排序目的的一种排序算法。其中,冒泡排序是最基础的交换排序,它通过相邻元素间的比较和交换,逐步将较大的元素推向序列末尾。优化后的...

    各常见排序算法实践

    以下是对标题“各常见排序算法实践”及描述中涉及的排序算法的详细说明: 1. **简单选择排序**: 简单选择排序是一种基于比较的排序算法,其基本思想是在未排序序列中找到最小(或最大)元素,存放到排序序列的...

    Python实现常见排序算法详解

    使用场景及目标:通过实际代码理解和掌握常见排序算法的工作原理,优化数据处理效率。适用于初学者学习算法基础知识,以及开发者在实际项目中选择合适的排序算法。 其他说明:文章内容结构清晰,每个算法的实现代码...

    五种常见排序法的比较

    五种常见排序法的比较 归并排序 快速排序 选择排序 插入排序 冒泡排序

    Python常见排序算法汇总共2页.pdf.zip

    在这个"Python常见排序算法汇总共2页.pdf.zip"压缩包中,我们很可能找到了一个简明扼要的文档,涵盖了Python中常见的排序算法。这些算法是编程基础知识的重要组成部分,对于优化代码性能和解决复杂问题至关重要。 ...

    常见排序算法的实现与性能比较JAVA版

    常见排序算法的实现与性能比较JAVA 问题描述:实现合并排序,插入排序,希尔排序,快速排序,冒泡排序,桶排序算法 实验要求: A. 在随机产生的空间大小分别为 N = 10, 1000,10000,100000 的排序样本(取值为[0...

    JavaScript中常见排序算法详解共19页.pdf.zip

    本资料"JavaScript中常见排序算法详解共19页.pdf.zip"涵盖了JavaScript中的一些主要排序算法,旨在帮助开发者深入理解和熟练运用这些算法。 首先,我们来了解一下排序算法的基本概念。排序是将一组数据按照特定顺序...

    C语言常见排序算法及比较

    ### C语言常见排序算法及比较 #### 插入排序(Insertion Sort) **基本思想**: 插入排序是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置...

    JavaScript中常见排序算法详解共19页.pdf.z

    本资料“JavaScript中常见排序算法详解共19页.pdf.zip”提供了一份详尽的教程,涵盖了JavaScript中常用的各种排序算法。下面我们将深入探讨这些排序算法。 1. 冒泡排序(Bubble Sort):这是一种简单的排序算法,...

    常见排序算法分享:排序算法.zip

    在"排序算法.zip"这个压缩包中,很可能是包含了关于各种常见排序算法的源代码、示例或教程。 1. 冒泡排序(Bubble Sort): 冒泡排序是一种简单的交换排序方法,通过重复遍历数组,比较相邻元素并交换位置,使得较...

    常见排序算法.zip

    这个压缩包“常见排序算法.zip”包含了一份名为“常见排序算法.pdf”的文档,很可能详细介绍了多种常见的排序算法及其原理。下面,我们将深入探讨这些排序算法的核心概念、工作原理以及它们的应用场景。 1. 冒泡...

    几种常见排序算法实现

    几种常见排序 基于比较的排序算法: 下界是 nlgn 1.1 SelectionSort:每次选出最下的元素,放在当前循环最左边的位置。 1.2 BubbleSort:每次比较相邻的两个数,使得最大的数像气泡一样冒到最右边。 1. 3 Insertion...

    常见排序算法 数据结构 C语言实现

    本资源“常见排序算法 数据结构 C语言实现”提供了一系列经典的排序算法的C语言实现,这些算法经过了VC 6.0编译器的验证,确保了其功能性和可靠性。以下是关于这些排序算法的详细解释: 1. **直接选择排序**:选择...

Global site tag (gtag.js) - Google Analytics