# 几种经典的数据排序及其Java实现

n个记录的文件的直接选择排序可经过n-1趟直接选择排序得到有序结果：
①初始状态：无序区为R[1..n]，有序区为空。
②第1趟排序

……
③第i趟排序

Java实现代码如下：

package selectsort;

public class Sort {
public static void main(String[] args)
{
int[] a = {8,77,66,99,2,7,4,6,100,34};
int[] b ;
b = selectsort(a);
for(int i  = 0; i < b.length; i++)
{
System.out.println(b[i]);
}
}
public static int[] selectsort(int[] p)
{
int temp = 0;
int minindex = 0;
int[] array = p.clone();
for(int i = 0; i < array.length; i++)
{
minindex = i;
for(int j = i+1; j < array.length; j++)
{
if(array[minindex] > array[j] )
minindex = j;
}
temp = array[i];
array[i] = array[minindex];
array[minindex] = temp;
}
return array;
}
}


Java实现代码：

package bubblesort;

public class Bubblesort {
public static void main(String[] args)
{
int[] a = {8,77,66,99,2,7,4,6,100,34};
int[] b;
b = bubble(a);
for(int i =0; i <b.length; i++ )
{
System.out.println(b[i]);
}

}
public static int[] bubble(int[] a)
{
int[] array = a.clone();
for(int i  = 0; i < array.length - 1; i++)
{
for(int j = 0; j < array.length - 1 - i; j++)
{
if(array[j] > array[j+1])
sway(array,j,j+1);
}
}
return array;
}
public static void sway(int[] b, int m, int n)
{
int temp = b[m];
b[m] = b[n];
b[n] = temp;
}

}


Java示例代码如下：

package insertsort;

public class Insert {
public static void main(String[] args)
{
int[] a = {500,77,66,99,2,7,4,6,100,34};
int[] b;
b = insert(a);
for(int i =0; i <b.length; i++ )
{
System.out.println(b[i]);
}
}
public static int[] insert(int[] c)
{
int[] array = c.clone();
for(int i  = 1; i < array.length; i++)
{
if(array[i] < array[i - 1])
{
int temp = array[i];
int j  = i;
while((j>0)&&(array[j - 1] > temp))
{
array[j] = array[j - 1];
j--;
}
array[j] = temp;
}
}
return array;
}
}


13 14 94 33 82
25 59 94 65 23
45 27 73 25 39
10

10 14 73 25 23
13 27 94 33 39
25 59 94 65 82
45

10 14 73
25 23 13
27 94 33
39 25 59
94 65 82
45

10 14 13
25 23 33
27 25 59
39 65 73
45 94 82
94

package shellsort;

public class shellsort {
public static void main(String[] args)
{
int[] a = {500,77,66,99,2,7,4,6,100,34};
int[] b;
b = shell(a);
for(int i =0; i <b.length; i++ )
{
System.out.println(b[i]);
}
}
public static int[] shell(int[] a)
{
int[] array = a.clone();
int len = array.length;
int i = 0;
int j = 0;
int k = -1;
int temp = -1;
int gap = len;

do
{
gap = gap / 3 + 1;

for(i=gap; i<len; i+=gap)
{
k = i;
temp = array[k];

for(j=i-gap; (j>=0) && (array[j]>temp); j-=gap)
{
array[j+gap] = array[j];
k = j;
}

array[k] = temp;
}

}while( gap > 1 );

return array;
}
}


（1）j从右向左扫描，直到r[j].key<x.key时，将r[j]移至控单元r[i],此时r[j]相当于控单元。
（2）i从左向后扫描，直到r[i].key>x.key时，将r[i]移至空单元r[j],此时r[i]相当于空单元。

Java示例代码如下：
package quicksort;

public class Quick {
public static void main(String[] args)
{
int[] a = {500,77,66,99,2,7,4,6,100,34,1000,888,777,666,555,333,222,111,87,45,69,12,45,};

QuickSort(a,a.length);
for(int i =0; i <a.length; i++ )
{
System.out.println(a[i]);
}
}
public static void swap(int[] array, int i, int j)
{
int temp = array[i];

array[i] = array[j];

array[j] = temp;
}

public static int partition(int[] array, int low, int high)
{
int pv = array[low];

while( low < high )
{
while( (low < high) && (array[high] >= pv) )
{
high--;
}

swap(array, low, high);

while( (low < high) && (array[low] <= pv) )
{
low++;
}

swap(array, low, high);
}

return low;
}

public static void QSort(int[] array, int low, int high)
{
if( low < high )
{
int pivot = partition(array, low, high);

QSort(array, low, pivot-1);
QSort(array, pivot+1, high);
}
}

public static void QuickSort(int[] array, int len) // O(n*logn)
{
QSort(array, 0, len-1);
}

}


Java示例代码如下：
package MergeSortClass;

public class MergeSortClass {
private int[] SortOut;
public void printSortedOutput()
{
for (int i = 0; i < this.SortOut.length; i++)
{
System.out.print(this.SortOut[i] + " ");
}
}

public static void main(String[] args)
{
int[] in = { 2, 5, 3, 8, 6, 7, 1, 4, 0, 9 };
MergeSortClass msTest = new MergeSortClass(in);
msTest.printSortedOutput();
}

public MergeSortClass(int[] in)
{
this.SortOut=this.MergeSort(in);
}

private int[] MergeSort(int[] i_list)
{
if (i_list.length == 1) {
return i_list;
} else {
int[] listL = new int[i_list.length / 2];
int[] listR = new int[i_list.length - i_list.length / 2];
int Center = i_list.length / 2;
for (int i = 0; i < Center; i++) {
listL[i] = i_list[i];
}
for (int i = Center, j = 0; i < i_list.length; i++, j++) {
listR[j] = i_list[i];
}

int[] SortedListL=MergeSort(listL);
int[] SortedListR=MergeSort(listR);
int[] o_list = MergeTwoList(SortedListL, SortedListR);
return o_list;
}
}

private int[] MergeTwoList(int[] listL, int[] listR)
{
int i = 0, j = 0;
int[] o_list = new int[listL.length + listR.length];
int foot = 0;
while (i < listL.length && j < listR.length) {
if (listL[i] <= listR[j]) {
o_list[foot] = listL[i];
i++;
} else {
o_list[foot] = listR[j];
j++;
}
foot++;
}

if (i == listL.length) {
while (j < listR.length) {
o_list[foot++] = listR[j++];
}
} else { // j==listR.length
while (i < listL.length) {
o_list[foot++] = listL[i++];
}
}
return o_list;
}
}

#### java对数据库数据排序

2012年05月24日 614B 下载

#### 【JAVA】实现注解拼接SQL+字段进行排序

2017-06-26 09:42:03

#### java模拟数据库的排序-合并连接

2015年10月04日 6KB 下载

#### Java常见4种排序

2017-03-14 20:11:17

#### java使用现有的类库的排序方法

2012-07-24 20:13:19

#### java数据排序

2014-05-28 13:07:14

#### java各种排序总结及实现

2015-11-05 21:33:08

#### 常见Java七大排序

2017-01-11 21:57:00

#### java中的比较排序

2016-11-17 13:52:34

#### java 常用五种排序

2016-03-28 14:35:06