Java内部排序

目录

交换排序

1、冒泡排序 

2、冒泡排序 (数据结构)

3、快速排序

选择排序

1、简单(直接)选择排序

2、树形选择排序

3、堆排序

插入排序

1、直接插入排序

2、折半插入排序

3、希尔排序

归并排序

基数排序

利用系统类实现排序


交换排序

1、冒泡排序 

小的往上浮

两两比较待排数组元素的大小,发现两个数组元素的次序相反时即进行交换,直到没有反序的数组元素为止。

package my;

public class 排序 {

	public static void main(String[] args) {
		int a[] = { 49, 38, 65, 97, 76, 13, 27, 49 };
		System.out.println("原数组元素为:");
		int l = a.length;
		for (int i = 0; i < l; i++) {
			System.out.print(a[i] + "  ");
		}
		paixu p = new paixu();
		p.maopao(a);
		System.out.println('\n' + "排序后数组元素为:");
		for (int i = 0; i < l; i++) {
			System.out.print(a[i] + "  ");
		}
	}
}
class paixu 
{
	public void maopao(int a[]) 
	{
		int l = a.length;
		for (int i = 0; i < l; i++) 
		{
			for (int j = i + 1; j < l; j++)
			{
				if (a[i] > a[j]) 
				{
					int temp = a[i];
					a[i] = a[j];
					a[j] = temp;
				}
				}
//System.out.println('\n' + "第n趟比较后元素为:");  变量i1是重点,不能写成i,会影响结果
//for (int i1= 0; i1< l; i1++) {
//System.out.print(a[i1] + "  ");
//}
		}
	}
}

2、冒泡排序 (数据结构)

(1)大的往下坠

(2)比较第一个与第二个,然后比较第二个与第三个;n个元素最多要进行n-1趟排序,每趟排序的比较次数逐渐减1

class paixu 
{
	public void maopao(int a[]) 
	{
		int m=a.length-1;int flag=1;//flag用于标记某趟是否发生交换
		while((m>0) && (flag==1))
		{
			flag=0;//flag置为0,如果本趟排序没有发生交换,则不会执行下一趟排序
			for(int j=0;j<=m-1;j++)//j<=m-1;若<m,则j+1会越界出错
				if(a[j]>a[j+1])
				{
					flag=1;//表示本趟发生了交换
					int temp=a[j];a[j]=a[j+1];a[j+1]=temp;
				}
			--m;//第一趟之后,选出最大值,并放在了a[a.length-1]中
		}
	}
}

3、快速排序

选择排序

1、简单(直接)选择排序

class paixu 
{
	public void xuanze(int a[]) 
	{
		int l=a.length-1;
		for(int i=0;i<l;i++)//n个元素进行n-1趟比较,i代表趟数;j代表比较的次数
		{
			int k=i;
			for(int j=i+1;j<=l;j++)//注意:j<=l
				if(a[j]<a[k]) k=j;//k指向此趟排序中关键字最小的记录
			if(k!=i)
			{
				int temp=a[k];a[k]=a[i];a[i]=temp;
			}
		}
	}
}

2、树形选择排序

3、堆排序

插入排序

1、直接插入排序

基本思想:经过i-1遍处理后,L[1……i-1]已排好序,第i遍处理仅将L[i]插入L[1……i-1]的适当位置。

public void charu(int a[]) 
	{
		int len=a.length;
		for(int i=1;i<len;i++)
		{
			int temp=a[i];//将插入的记录暂存
			int j=i;
			while(a[j-1]>temp)//从后向前寻找插入位置
			{
				a[j]=a[j-1];//记录逐个后移
				j--;
				if(j<=0)//=0,由于j-1防止越界
					break;
			}
			a[j]=temp;//插入到合适的位置
		}
	}

2、折半插入排序

3、希尔排序

归并排序

基数排序

利用系统类实现排序

系统类库中Arrays类提供了多种操作数组的方法,对于排序有:

(1)public static void sort(int[] a)

Java内部排序

public static void main(String[] args) {
		int a[] = { 4, -5, 23, 7 };
		Arrays.sort(a);// 调用Arrays类的整型数组排序方法
		for (int i = 0; i < a.length; i++)
			System.out.print(a[i] + "  ");

		char b[] = { 'c', 'e', 'a', 'b', 'g' };
		Arrays.sort(b, 0, 3);// 只排下标为1-2的元素
		for (int i = 0; i < b.length; i++)
			System.out.print(b[i] + "  ");

		String c[] = { "gra", "gab", "bna" };
		Arrays.sort(c);// 只排下标为1-2的元素(下标的不参与排序)
		for (int i = 0; i < c.length; i++)
			System.out.print(c[i] + "  ");
}