数组排序各种方法

本文详细介绍了四种基本的排序算法:普通排序法(即简单选择排序)、冒泡排序法、选择排序法和插入排序法。通过具体的示例代码展示了每种算法的工作原理和步骤,帮助读者理解它们的优缺点及其在实际应用中的适用场景。
摘要由CSDN通过智能技术生成

这边不讲睡眠的排序法,睡眠排序法有他的优点,但弊大于利。

排序操作:普通排序法,冒泡排序法,选择排序法

移动操作:插入排序法

普通排序法

import java.util.Scanner;
public class shuzupaixu {

	public static void main(String[] args) {
		int []a=new int[10];
		int t;
		Scanner in=new Scanner(System.in);
		for(int c=0;c<a.length;c++) {    //输入10个数
			a[c]=in.nextInt();
		}
		for(int i=0;i<a.length-1;i++) {   //普通排序法,开头用a[0]与a[1]比
			for(int j=i+1;j<a.length;j++) {
				if(a[i]<a[j]) {  //a[0]小于a[1]则a[0]a[1]交换
					t=a[i];
					a[i]=a[j];
					a[j]=t;
				}
			}
		}
		for(int k:a) {
			System.out.println(k);
		}
	}

}
普通排序法的过程是:
int []a={1,2,3,4,5};
for(int i=0;i<a.length-1;i++) {   
	for(int j=i+1;j<a.length;j++) {
		if(a[i]<a[j]) {  //小的往后移
		t=a[i];
		a[i]=a[j];
		a[j]=t;}}}
数组a原内容为1,2,3,4,5
i=0{
首先是a[0]与a[1]比,a[0]<a[1]交换,此时数组为2,1,3,4,5   然后j++
这时j=2则是a[0]与a[2]比,交换后数组为3,1,2,4,5     j++
j=3    a[0]与a[3]比,交换后数组为4,1,2,3,5     j++
j=4    a[0]与a[4]比,交换  5,1,2,3,4
}
i=1{
            j=i+1=2   a[1]与a[2]比,交换,则数组为5 ,2,1,3,4       j++
               j=3     a[1]与a[3]比,交换  5,3,1,2,4            j++
                j=4    a[1]与a[4]        5,4,1,2,3        j++
}
i=2{
        j=i+1=3     a[2]与a[3]       5,4,2,1,3     j++
            j=4     a[2]与a[4]       5,4,3,1,2     
}
i=3{
        j=i+1=4     a[3]与a[4]      5,4,3,2,1

冒泡排序法

import java.util.Scanner;
public class shuzupaixu {

	public static void main(String[] args) {
		int []a=new int[10];
		int t;
		Scanner in=new Scanner(System.in);
		for(int c=0;c<a.length;c++) {   
			a[c]=in.nextInt();
		}
		for(int i=0;i<a.length;i++) {   
			for(int j=0;j<a.length-1;j++) {
				if(a[j]<a[j+1]) {  
					t=a[j];
					a[j]=a[j+1];
					a[j+1]=t;
				}
			}
		}
		for(int k:a) {
			System.out.println(k);
		}
	}

}
冒泡排序法过程:
int []a={1,2,3,4,5};
for(int i=0;i<a.length-1;i++) {   
	for(int j=0;j<a.length;j++) {
		if(a[i]<a[j]) {  //小的往后移
		t=a[i];
		a[i]=a[j];
		a[j]=t;}}}
数组a原内容为1,2,3,4,5
i=0{
   j=0     a[0]与a[1]比,a[0]<a[1]   则交换后得2,1,3,4,5   j++
    j=1    a[1]与a[2]比      交换后的2,3,1,4,5     j++     
    j=2    a[2]与a[3]比      交换后的2,3,4,1,5     j++ 
    j=3    a[1]与a[2]比      交换后的2,3,4,5,1     
}
i=1{
    j=0    a[0]与a[1]比      交换后的3,2,4,5,1     j++  
    j=1    a[1]与a[2]比      交换后的3,4,2,5,1     j++   
    j=2    a[2]与a[3]比      交换后的3,4,5,2,1     
}
i=2{
    j=0    a[0]与a[1]比      交换后的4,3,5,2,1      j++
    j=1    a[1]与a[2]比      交换后的4,5,3,2,1      
}
i=3{
    j=0    a[0]与a[1]比      交换后的5,4,3,2,1       }  

选择排序法

import java.util.Scanner;
public class shuzupaixu {

	public static void main(String[] args) {
		int []a=new int[10];
		int t,k;
		Scanner in=new Scanner(System.in);
		for(int c=0;c<a.length;c++) {   
			a[c]=in.nextInt();
		}
for(int i=0;i<a.length;i++) {
			k=i;
			for(int j=i+1;j<a.length;j++) {
				if(a[k]<a[j]) {
					k=j;
				}
				if(k==j) {
					t=a[i];
					a[i]=a[k];
					a[k]=t;
				}
			}
		}
		for(int c:a) {
			System.out.println(c);
		}
	}

}
选择排序法过程:
int []a= {1,2,3,4,5};
		int t,k;
for(int i=0;i<a.length;i++) {
			k=i;
			for(int j=i+1;j<a.length;j++) {
				if(a[k]<a[j]) {
					k=j;
				}
				if(k==j) {
					t=a[i];      //注意这里交换数据的细节,不然会把后面弄乱
					a[i]=a[k];
					a[k]=t;
				}
			}
		}
i=0{ 
        k=0  j=1    k=1  交换后得2,1,3,4,5    j++
        k=1  j=2    k=2  交换后得3,1,2,4,5    j++
        k=2  j=3    k=3  交换后得4,1,2,3,5    j++
        k=3  j=4    k=3  交换后得5,1,2,3,4    
}
i=1{
        k=1   j=2   k=2  交换后得5,2,1,3,4    j++
        k=2   j=3   k=3  交换后得5,3,1,2,4    j++
        k=3   j=4   k=4  交换后得5,4,1,2,3   
}
i=2{
          k=2   j=3   k=3  交换后得5,4,2,1,3    j++
          k=3   j=4   k=4  交换后得5,4,3,1,2    
}
i=3{
           k=3   j=4   k=4  交换后得5,4,3,2,1}

插入排序法

public class charu {

	public static void main(String[] args) {

		int t;
		int []a= {1,2,3,4,5};
		for(int i=1;i<a.length;i++) {
			t=a[i];
			int j=i;
			for(;j>0&&t>a[j-1];j--) {
				a[j]=a[j-1];
			}
			a[j]=t;
		}
		for(int k:a) {
			System.out.print(k+" ");
		}
	}
}
插入排序法原理
外层循环
首先令i=1,j=i。i=1的原因是先让a[1]跟a[0]比较,j随i的值变而变,用t装着a[1]的值。
内循环条件是如果j>0并且大于a[j]-1第一次的a[j-1]是a[0]就是保证a[1]跟a[0]比较,在j--
i=1,     j=1 ,    a[1]=2,    t=2,    1>0&&a[1]=2>a[0]=1,   将1移到a[1],j--=0,a[0]=2 a[1]=1
{
i=2,     j=2 ,    a[2]=3,    t=3,    3>0&&a[2]=3>a[1]=1,   将1移到a[2],j--=1,a[1]=3 a[2]=1 
接着j=1,j>0&& a[1]=3>a[0]=2,    a[0]=3,a[1]=2,a[1]=1;}
{
{i=3,     j=3 ,    a[3]=4,    t=4,    4>0&&a[3]=4>a[2]=1,   将1移到a[3],j--=2,a[2]=4 a[3]=1 
接着j=2,2>0&&a[2]=4>a[1]=2,    a[1]=4,a[2]=2,a[3]=1;    j--=1    1>0&&a[1]=4>a[0]=3,    a[0]=4,a[1]=3,a[2]=2,a[3]=1;}
{
{i=4,     j=4 ,    a[4]=5,    t=5,    5>0&&a[4]=5>a[3]=1,   将1移到a[4],j--=3,a[3]=5 a[4]=1 
接着j=3, 3>0&&a[3]=5>a[2]=2,    a[1]=3,a[2]=5,a[3]=2;    j--=2    2>0&&a[2]=5>a[1]=3,    a[0]=4,a[1]=5,a[2]=3,a[3]=2,a[4]=1;    j--=1 1>0&&a[1]=5>a[0]=4,    a[0]=5,a[1]=4,a[2]=3,a[3]=2,a[4]=1;}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值