欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

java简单排序(选择;冒泡;插入)

程序员文章站 2024-03-16 14:13:28
...

前言:

      虽然排序算法是很简单的,之后我的数据结构专栏会有讲到进阶的排序可以去康康。现在我们用java来联系一下简单的排序,即选择插入冒泡
首先来看看各自的简介吧,都是很好理解的内容:

1、选择排序

选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。选择排序是不稳定的排序方法。

      用自己的话归纳一下选择排序就是依次找出最大或者最小的放到末尾或者第一个。这里有动图了解一下:
java简单排序(选择;冒泡;插入)

2、冒泡排序

冒泡排序算法的原理如下: [1]
比较相邻的元素。如果第一个比第二个大,就交换他们两个。 [1]
对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。 [1]
针对所有的元素重复以上的步骤,除了最后一个。 [1]
持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

      用自己的话归纳一下就是依次交换,将最大的放到末尾。动图康康:
java简单排序(选择;冒泡;插入)

3、插入排序

插入排序(Insertion sort)是一种简单直观且稳定的排序算法。如果有一个已经有序的数据序列,要求在这个已经排好的数据序列中插入一个数,但要求插入后此数据序列仍然有序,这个时候就要用到一种新的排序方法——插入排序法,插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序,时间复杂度为O(n^2)。是稳定的排序方法。插入算法把要排序的数组分成两部分:第一部分包含了这个数组的所有元素,但将最后一个元素除外(让数组多一个空间才有插入的位置),而第二部分就只包含这一个元素(即待插入元素)。在第一部分排序完成后,再将这个最后元素插入到已排好序的第一部分中。
插入排序的基本思想是:每步将一个待排序的记录,按其关键码值的大小插入前面已经排序的文件中适当位置上,直到全部插入完为止。

      用自己的话归纳就是,依次比较,插入到大小合适的位置。动图来啦:
java简单排序(选择;冒泡;插入)
      好的,现在我们来写一下这个简单的演示代码:
      老规矩,创建项目,包,主类,主方法,还有三个排序方法

package shiyan;
import java.util.Scanner;

public class Order{//主类
	public static void Menu() {
		System.out.println("1.冒泡排序");
		System.out.println("2.选择排序");
		System.out.println("3.插入排序");
	}
	public static void PrintArray(int []a) {
		for(int i=0;i<a.length;i++) 
			System.out.printf("%4d",a[i]);
		System.out.println();
	}
		
public static void Bubble_Sort(int[]a)
	{//冒泡排序
	        for(int i =1;i<a.length;i++) { 
	            for(int j=0;j<a.length-i;j++) {
	                if(a[j]>a[j+1]) {
	                    int temp = a[j];
	                    a[j]=a[j+1];
	                    a[j+1]=temp;
	            }    
	        }
	    }
	}

public static void Selection_sort(int[]a) {
		//选择排序
			int i=0;int min = 0;
		     for (i = 0; i < a.length - 1; i++) {    
		          min = i;
		          for (int j = i + 1; j < a.length; j++) {
                 if (a[min] > a[j]) 	
                	 min = j;
		                 }
		           
		           if (min != i) {
		              int tmp = a[min];
		              a[min] = a[i];
		              a[i] = tmp;
		           }  
		     }
		     }
		 
public static void Insertion_sort(int []a) {
		//插入排序
			if(a == null || a.length < 2)
				PrintArray(a);
			for(int i=1;i<a.length;i++){
			for(int j=i;j>0;j--){
			if(a[j]<a[j-1]){
			//TODO:
			int temp=a[j];
			a[j]=a[j-1];
			a[j-1]=temp;
			//
				}else{
			//接下来是无用功
			break;
				}
			}
		}
		PrintArray(a);
	}
	public static void main(String []args) {
		int []a = new int[10];
		Scanner n = new Scanner(System.in);
		System.out.println("欢迎使用*****************");
		System.out.println("请输入你需要进行排序的一组整数:");
		for(int i=0;i<10;i++) {
			System.out.println("第"+(i+1)+"个数字:");
			a[i]=n.nextInt();
		}
		int q;
		int p;
		do {
			Menu();
		q = n.nextInt();
		switch(q){
		case 1:
			Bubble_Sort(a);//冒泡排序
			PrintArray(a);
			break;
		case 2:
			Selection_sort(a);//选择排序
			PrintArray(a);
			break;
		case 3:
			Insertion_sort(a);//插入排序
			break;
			default:
				System.out.println("输入有误!");
				break;
		}
		System.out.println("是否继续,是则输入1,否输入任意字符");
		p = n.nextInt();
	}while(p==1);	
	}
}

后记:

      用java练习一下,虽然很简单,你也可以自己写一个成绩管理系统来排序。有更好的结构可以评论哦,谢谢。