排序算法的Java实现
下面是几种排序的用Java的实现:

冒泡排序
public class BubbleSortDemo


{

/**//*
* 从前到后扫描序列,比较相邻的两个元素大小,若发现逆序则交换位置,
* 使最大的达到序列的最后位置。然后再从后到前扫描剩下的序列,如此。
* 当数列有序后不再继续循环
*/
private void bubbleSort(int[] numlist)

{
int in,out,temp;
boolean flag = false;
//从后到前,从最后一项开始到第二项扫描数列。
for( out=numlist.length-1; out>0;out--)

{
flag = true;
//从第一项到第out项扫描数列
for(in=0; in<out; in++)

{
//当前项大于后项,则交换位置。
if(numlist[in]>numlist[in+1])

{
temp = numlist[in];
numlist[in] = numlist[in+1];
numlist[in+1] = temp;
flag = false;
}
}
if(flag) break;
for(int i=0; i<numlist.length; i++)
System.out.print(numlist[i]+ " ");
System.out.println();
}
}
//输出数列
public void display(int[] numlist)

{
for(int i=0; i<numlist.length; i++)
System.out.print(numlist[i]+ " ");
System.out.println();
}
public static void main(String[] args)

{
BubbleSortDemo sort = new BubbleSortDemo();

int num[] =
{4,11,17,6,1,2,13,15};
System.out.println("原序是:");
sort.display(num);
System.out.println("每次冒泡排序后是:");
sort.bubbleSort(num);
}
}

插入排序
public class InsertSortDemo


{
private void insertSort(int[] numlist)

{
int in, out,temp;
//从out处分开数列
for(out=1; out<numlist.length; out++)

{
in = out;
temp = numlist[in]; //temp为待排序数据
while(in>0 && temp<numlist[in-1]) //数列值大于排序值时,

{
numlist[in] = numlist[in-1]; //数列向右移一位
--in; //指针向左移一位
}
numlist[in] = temp; //插入待排序的数据
}
}
public void display(int[] numlist)

{
for(int i=0; i<numlist.length; i++)
System.out.print(numlist[i]+ " ");
System.out.println();
}
public static void main(String[] args)

{
InsertSortDemo sort = new InsertSortDemo();

int num[] =
{4,11,17,6,1,2,13,15};
System.out.print("原序是:");
sort.display(num);
System.out.print("插入排序是:");
sort.insertSort(num);
sort.display(num);
}
}

选择排序
public class SelectSortDemo


{

/**//*
* 首先找出最小的数据,让它与第一项互换,这样最小的数据项就在第一位。
* 接着从剩下的元素中找出最小的元素,与第二项互换,使第二小的元素放在第二位,
* 依此类推,直至整个数列有序。
*/
private void selectSort(int[] numlist)

{
int min,in,out,temp;
for(out=0; out<numlist.length; out++)

{
min = out; //将out项设为最小项
for(in=out+1;in<numlist.length; in++) //从第二项开始扫描
if(numlist[in]<numlist[min]) //找到最小项in,将in作为最小项
min = in;
//out项与最小值交换
temp = numlist[out];
numlist[out] = numlist[min];
numlist[min] = temp;
}
}
public void display(int[] numlist)

{
for(int i=0; i<numlist.length; i++)
System.out.print(numlist[i]+ " ");
System.out.println();
}
public static void main(String[] args)

{
SelectSortDemo sort = new SelectSortDemo();

int num[] =
{4,11,17,6,1,2,13,15};
System.out.print("原序是:");
sort.display(num);
System.out.print("选择排序是:");
sort.selectSort(num);
sort.display(num);
}
}
public class BubbleSortDemo

{
/**//*
* 从前到后扫描序列,比较相邻的两个元素大小,若发现逆序则交换位置,
* 使最大的达到序列的最后位置。然后再从后到前扫描剩下的序列,如此。
* 当数列有序后不再继续循环
*/
private void bubbleSort(int[] numlist)
{
int in,out,temp;
boolean flag = false;
//从后到前,从最后一项开始到第二项扫描数列。
for( out=numlist.length-1; out>0;out--)
{
flag = true;
//从第一项到第out项扫描数列
for(in=0; in<out; in++)
{
//当前项大于后项,则交换位置。
if(numlist[in]>numlist[in+1])
{
temp = numlist[in];
numlist[in] = numlist[in+1];
numlist[in+1] = temp;
flag = false;
}
}
if(flag) break;
for(int i=0; i<numlist.length; i++)
System.out.print(numlist[i]+ " ");
System.out.println();
}
}
//输出数列
public void display(int[] numlist)
{
for(int i=0; i<numlist.length; i++)
System.out.print(numlist[i]+ " ");
System.out.println();
}
public static void main(String[] args) 
{
BubbleSortDemo sort = new BubbleSortDemo();
int num[] =
{4,11,17,6,1,2,13,15};
System.out.println("原序是:");
sort.display(num);
System.out.println("每次冒泡排序后是:");
sort.bubbleSort(num);
}
}
public class InsertSortDemo 

{
private void insertSort(int[] numlist)
{
int in, out,temp;
//从out处分开数列
for(out=1; out<numlist.length; out++)
{
in = out;
temp = numlist[in]; //temp为待排序数据
while(in>0 && temp<numlist[in-1]) //数列值大于排序值时,
{
numlist[in] = numlist[in-1]; //数列向右移一位
--in; //指针向左移一位
}
numlist[in] = temp; //插入待排序的数据
}
}
public void display(int[] numlist)
{
for(int i=0; i<numlist.length; i++)
System.out.print(numlist[i]+ " ");
System.out.println();
}
public static void main(String[] args) 
{
InsertSortDemo sort = new InsertSortDemo();
int num[] =
{4,11,17,6,1,2,13,15};
System.out.print("原序是:");
sort.display(num);
System.out.print("插入排序是:");
sort.insertSort(num);
sort.display(num);
}
}
public class SelectSortDemo 

{
/**//*
* 首先找出最小的数据,让它与第一项互换,这样最小的数据项就在第一位。
* 接着从剩下的元素中找出最小的元素,与第二项互换,使第二小的元素放在第二位,
* 依此类推,直至整个数列有序。
*/
private void selectSort(int[] numlist)
{
int min,in,out,temp;
for(out=0; out<numlist.length; out++)
{
min = out; //将out项设为最小项
for(in=out+1;in<numlist.length; in++) //从第二项开始扫描
if(numlist[in]<numlist[min]) //找到最小项in,将in作为最小项
min = in;
//out项与最小值交换
temp = numlist[out];
numlist[out] = numlist[min];
numlist[min] = temp;
}
}
public void display(int[] numlist)
{
for(int i=0; i<numlist.length; i++)
System.out.print(numlist[i]+ " ");
System.out.println();
}
public static void main(String[] args) 
{
SelectSortDemo sort = new SelectSortDemo();
int num[] =
{4,11,17,6,1,2,13,15};
System.out.print("原序是:");
sort.display(num);
System.out.print("选择排序是:");
sort.selectSort(num);
sort.display(num);
}
}
浙公网安备 33010602011771号