public class Sort {
//插入排序算法策略:排序值列中的前2个值,并在必要时交换它们。
//在相对于前2个值(有序的)的适当位置插入值列的第三个值。
//然后,在相对于前3个值(有序的)的适当位置插入值列的第4个值。
//每进行一次插入操作,有序子集中的数值个数将递增1。
//重复该过程,直至值列中的所有值都按照次序排列为止。插入过程需要移动数组中的其他值,为插入的元素腾出存储空间。
public static void insert(int[] data) {
int length = data.length;
for(int i=1; i<length;i++) {
int key = data[i];
int index = i;
while(index>0 && data[index-1]>key) {
data[index] = data[index -1];
index--;
}
data[index] = key;
}
// for(int i=1; i<data.length; i++) {
// int j = i;
// int temp = data[i];
// for(; j>0&&data[j-1]>temp; j--) {
//
// data[j] = data[j-1];
//
// }
// data[j]=temp;
// }
}
//选择排序算法的一般策略:搜索整个值列,以找到最小值。将该值与值列中第一个位置上的值进行交换。
//搜索剩下的值列(第一个除外),以找到其中的最小值,然后将其与值列中第二个位置上的值进行交换。
//对值列中的每个位置重复该过程。在算法结束时,就完成了对值列的排序。
public static void select(int[] data) {
int temp = 0;
int length = data.length;
for(int i=0; i<length; i++) {
int minindex = i;
for(int j=i+1;j<data.length;j++) {
if(data[i]>data[j]) {
minindex = j;
}
}
if(minindex != i) {
temp = data[i];
data[i] = data[minindex];
data[minindex] = temp;
}
}
}
//冒泡排序算法的一般性策略:搜索整个值列,比较相邻元素,
//如果两者的相对次序不对,则交换它们,其结果是最大值“想水泡一样”移动到值列的最后一个位置上,
//这也是它在最终完成排序的值列中合适的位置。
//然后再次搜索值列,将第二大的值移动至倒数第二个位置上,重复该过程,直至将所有元素移动到正确的位置上。
public static void bubble1(int[] data) {
int temp = 0;
int length = data.length;
for(int i=length-1; i>0; i--) {
for(int j=0; j<i; j++) {
if(data[j] > data[j+1]) {
temp = data[j];
data[j] = data[j+1];
data[j+1] = temp;
}
}
}
}
public static void bubble2(int[] data) {
int temp = 0;
int length = data.length;
for(int i=0; i<length; i++) {
for(int j=1; j<length-i; j++) {
if(data[j-1] > data[j]) {
temp = data[j-1];
data[j-1] = data[j];
data[j] = temp;
}
}
}
}
//基本思想算法先将要排序的一组数按某个增量dn/2,n为要排序数的个数分成若干组
//每组中记录的下标相差d.对每组中全部元素进行直接插入排序然后再用一个较小的增量d/2对它进行分组
//在每组中再进行直接插入排序。当增量减到1时进行直接插入排序后排序完成。
public static void shell(int[] data) {
double d = data.length;
double length = data.length;
int temp = 0;
while (true) {
d = Math.ceil(d / 2);
int d1 = (int) d;
for (int i = d1; i < length; i++) {
for(int j=i; j<length; j++) {
int k = j;
temp = data[j];
for(; k>=d1&&temp<data[k-d1]; k-=d1) {
data[k] = data[k-d1];
}
data[k] = temp;
}
}
if(d1==1) {
break;
}
}
}
//快速排序是C.R.A.Hoare于1962年提出的一种划分交换排序。
//它采用了一种分治的策略,通常称其为分治法(Divide-and-ConquerMethod)。
//
// 该方法的基本思想是:
//
// 1.先从数列中取出一个数作为基准数。
//
// 2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。
//
// 3.再对左右区间重复第二步,直到各区间只有一个数。
//第一次排序a=0,b=data.length-1
public static void quick(int[] data,int a,int b) {
if(a>=b) return;
int key = data[a];
int i = a;
int j = b;
while(j>i) {
for(;j>i;j--) {
if(data[j]<key) {
data[i] = data[j];
i++;
break;
}
}
for(;i<j;i++) {
if(data[i]>key) {
data[j] = data[i];
j--;
break;
}
}
}
data[i] = key;
quick(data,a,i-1);
quick(data,i+1,b);
}
public static void main(String[] args) {
int []array = {4,5,17,23,3,2,6,7,1};
quick(array,0,array.length-1);
for(int j=0; j<array.length; j++) {
System.out.println(array[j]);
}
}
}
分享到:
相关推荐
包括常见的排序算法,以及折半查找,首先对要查找的数据排好序,然后用递归调用的方式实现折半查找(包括了两种实现方式)。指定一个排好序的数组和要查找的值,同时指定要查找的左边界和有边界。左右边界要位于数组...
`Algorithm.java`文件可能包含了这些排序算法的Java实现代码,而`常见排序算法的实现与性能比较.doc`文档则可能详细比较了这些算法的性能和适用场景。`readme.txt`文件可能是对整个项目的简要说明,包括如何运行和...
java实现排序,各种排序算法,冒泡排序,选择排序,插入排序等等
Java实现六种常用排序 并用多线程进行速度比较(其实意义不大) 含有代码
自己写的4个Java代码,内有详细注释,适合想学... insertion_sort.java --插入排序 Divide.java --分治排序 HanoiCompute.java --递归实现汉诺塔 FileCtrl.java --递归实现显示目录下的所有文件和文件夹
冒泡排序是一种简单的排序算法,通过重复遍历数组,比较相邻元素并交换位置来实现排序。如果前一个元素大于后一个元素,它们的位置就会互换。这个过程会一直重复,直到没有更多的交换,表明数组已经排序完成。冒泡...
Java作为广泛应用的编程语言,提供了一种高效的方式来实现各种排序算法。本文将深入探讨七种常见的排序算法及其在Java中的实现。 1. 冒泡排序(Bubble Sort) 冒泡排序是一种简单的排序算法,它重复地遍历待排序的...
Java实现归并排序 Java 实现归并排序是一种常用的排序算法,通过分治策略将原始数组分成小组,然后对每个小组进行排序,最后将排序好的小组合并成一个有序数组。下面是 Java 实现归并排序的知识点总结: 基本思想 ...
要求:用一个类来描述一个排序算法,类中的sort方法通过调用比较、交换方法来实现数组排序。排序类放入一个特定的包MySort中。 (1)写一个final参数类M,包括比较次数、交换次数、探测次数属性,并重写构造器和...
Java作为一种广泛使用的编程语言,提供了多种排序算法的实现,使得开发者可以根据实际需求选择最合适的排序方式。本篇文章将详细探讨Java中三种常见的排序算法:冒泡排序、希尔排序和插入排序。 ### 冒泡排序 冒泡...
本资料主要探讨了Java中实现排序的12种方法,其中包括一些经典的排序算法以及基于集合的排序方式。以下是对这些排序算法的详细介绍: 1. **计数排序**:计数排序是一种非比较型排序算法,适用于整数排序。它通过...
本篇文章将详细探讨Java中实现的四种排序方法:插入排序、快速排序、合并排序,这些都是经典且实用的排序算法。 一、插入排序 插入排序是一种简单直观的排序算法,它的基本思想是通过构建有序序列,对于未排序数据...
在Java中实现二叉排序树,我们通常会定义一个`Node`类来表示树的节点,它包含键、值以及左右子节点的引用。例如: ```java class Node { int key; Object value; Node left, right; public Node(int item) { ...
本篇将详细讲解如何使用Java实现快速排序。 首先,理解快速排序的步骤至关重要。快速排序的主要步骤包括: 1. **选择枢轴元素(Pivot Selection)**:在待排序的数组中选取一个元素作为枢轴,通常选择第一个或最后...
总结一下,Java实现拖拽列表项的排序功能主要包括以下步骤: 1. 启用UI组件的拖放功能,如设置`AllowDrop`、`CanReorderItems`和`IsSwipeEnabled`属性。 2. 监听并处理拖放事件,更新数据模型以反映拖放操作。 3. ...
堆排序7.java 使用java实现的堆排序堆排序7.java 使用java实现的堆排序堆排序7.java 使用java实现的堆排序堆排序7.java 使用java实现的堆排序堆排序7.java 使用java实现的堆排序堆排序7.java 使用java实现的堆排序堆...
Java ip 地址排序Java ip 地址排序Java ip 地址排序Java ip 地址排序
Java实现堆排序不是C,Java实现堆排序不是C,Java实现堆排序不是C,Java实现堆排序不是C
在实际编程中,Java还提供了其他的排序算法实现,如`Arrays.sort()`方法,它是基于快速排序和插入排序的混合算法,性能优于冒泡排序,适用于大多数情况。然而,理解并实现冒泡排序有助于初学者掌握排序算法的基本...
Java实现计数排序不是C,Java实现计数排序不是C,Java实现计数排序不是C