# 几种经典的数据排序及其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日 21:57
• 614B
• 下载

## java数据排序

Collections.sort(list, new Comparator(){ @Override public int compare( MemberAddress o1, MemberA...
• jspamd
• 2014年05月28日 13:07
• 676

## Java中集合排序---点击表头对数据进行排序

Java中对集合的排序，因为项目中得实现一个点击表头对数据进行排序的功能，当然实现这个效果并不难，你完全可以在点击表头时向Action中发出一个请求，然后在利用排序的Hql语句对数据进行排序，这样你完...
• xusongsong520
• 2012年11月18日 16:19
• 2320

## 大数据算法：对5亿数据进行排序

• u013761665
• 2015年10月19日 23:32
• 15516

## 对大量数据进行排序

• paul342
• 2015年09月11日 10:10
• 3207

## java大量文件排序显示速度优化总结(数据库排序)

• boss_zhang_
• 2014年02月24日 20:53
• 2137

## 一亿条数据的排序处理

• Sun_XP_1988
• 2016年05月18日 23:28
• 3135

## [java]冒泡算法：让数字从小到大排序

package org.company.project.test; import java.util.Arrays; import java.util.Random; public class Arr...
• wahxsm
• 2015年06月30日 12:33
• 4200

## java获取键盘输入的数字,并进行排序

• qq_31598113
• 2016年12月19日 22:35
• 3135

## java数组中数字从小到大排序——冒泡排序法

• eclipse_yin
• 2016年04月06日 20:25
• 9703

举报原因： 您举报文章：几种经典的数据排序及其Java实现 色情 政治 抄袭 广告 招聘 骂人 其他 (最多只允许输入30个字)