Java内部排序
目录
交换排序
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)
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] + " ");
}