java[18]数据排序

 

排序

将一组数据按照指定的顺序进行排序的过程。

     排序的分类:

  1. 内部排序:

指将所需要处理的所有数据都加载到内部存储器中进行排序,包括(交换式排序法,选择式排序法和插入式排序法);

  1. 外部排序法:

数据量过大,无法全部加载到内存中,需要借助外部的存储进行排序,包括(合并排序法和直接合并排序法)。

 

交换式排序法

 

交换式排序法属于内部排序法,是运用数据值比较落后。依照判断规则对数据位置进行交换,以达到排序的目的。

交换式排序法又可以分成两种:

  1. 冒泡排序法(Bubble sort
  2. 快速排序法(Quick sort

 

 

冒泡排序法

 

选择式排序法:

选择式排序法也属于内部排序法,是从欲排序的数据中,按照指定的规则选出某一元素,经过和其他元素重整,再依照原则交换位置后达到排序的目的。

选择式排序法又能分为里两种:

  1. 选择排序法
  2. 堆排序法

 

选择排序法(比冒泡排序法速度略快)

第一次选择最小的数排在第一位

从剩下的7个数字选择最小的排在第一个

~~~~~~

~~~~~

~~~

 

插入式排序法:

插入式排序法属于内部排序法,是对于欲排序的元素以插入的方式找到该元素的适当位置,以达到排序的目的;

插入式排序法可分为三种:

  1. 插入跑排序法(insertion sort
  2. 、谢尔排序法(shell sort
  3. 二叉树排序法(binary-tree sort

 

插入排序法:

 

 

 

 

 

快速排序法:

是一种交换式排序法,快速排序是对冒泡排序的一种改进,基本思想是,通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的数据都比另外一部分的所有数据要小,然后按照此方法对两部分的数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序数列。

 

待补充----------------------------------------


package com.test;

public class Sort_Arrey {
	public static void main(String[] args) {
		int[] Arrey1 = {1,5,-9,0,20,18,-10,100,3};
		
		/*Bubble s1;
		s1 = new Bubble();
		s1.sort(Arrey1);*/
		
		/*Select select = new Select();
		select.sort(Arrey1);*/
		
		Insert insert = new Insert();
		insert.sort(Arrey1);
		
		/*int temp = 0 ;
		//排序 
		//外层循环决定走几趟
		for (int i = 0;i < Arrey1.length - 1; i++) {
			//第二层循环进行排序相邻数据进行比较大数据向右移动 
			for (int j=0;j<Arrey1.length-i-1;j++) {
				if (Arrey1[j] > Arrey1[j+1]) {
					temp = Arrey1[j];
					Arrey1[j] = Arrey1[j+1];
					Arrey1[j+1] = temp;
					
					
				}
			}
			
			
			
			
		}
		
		//打印排列好的数组 
		for (int i=0;i <Arrey1.length; i++) {
			System.out.print(Arrey1[i]+" ");
		}
		*/
	}

}


class Bubble{
	public void sort(int[] Arrey1) {
		int temp = 0 ;
		//排序 
		//外层循环决定走几趟
		for (int i = 0;i < Arrey1.length - 1; i++) {
			//第二层循环进行排序相邻数据进行比较大数据向右移动 
			for (int j=0;j<Arrey1.length-i-1;j++) {
				if (Arrey1[j] > Arrey1[j+1]) {
					temp = Arrey1[j];
					Arrey1[j] = Arrey1[j+1];
					Arrey1[j+1] = temp;
					
					
				}
			}
			
			
			
			
		}
		
		//打印排列好的数组 
		for (int i=0;i <Arrey1.length; i++) {
			System.out.print(Arrey1[i]+" ");
		}
		
		
	}	
}

class Select{
	public void sort(int[] Arrey) {
		//假设第一个是最小的数
		int Min = Arrey[0];
		int minindex = 0;
		int tmp = 0;
		
		//排序次数程序跑的次数
		for (int i =0;i< Arrey.length-1;i++) {
			//排序:
			for (int j=i+1;j< Arrey.length-1;j++) {
				//与右边的其他元素想比较,将最小的数字放在最左边,-----比较第二个与右边  
				if (Arrey[i] > Arrey[j]) {
					//minindex = j;
					tmp = Arrey[i];
					Arrey[i] = Arrey[j];
					Arrey[j]=tmp;
				}
			}
			
			
		}
		
		//打印排列好的数组 
		for (int i=0;i <Arrey.length; i++) {
			System.out.print(Arrey[i]+" ");
		}
		
		
	}
	
		
	
}

//插入排序
class Insert {
	//插入排序方法
	public void sort(int[] Arrey) {
		
		int tmp = 0;
		//后面n-1个依次跟前面的集合相比较次数是Arrey.length-1次
		for (int i =0;i<Arrey.length-1;i++) {
			//循环1次后前面相当于一个集合药品依次跟后面的数字比较
			for (int j=i+1;j>0;j--) {
				//如果左边的大,则向右移一位(节省了时间,不需要与左边的每个数字想比较)
				if (Arrey[j-1] > Arrey[j]) {
					tmp = Arrey[j-1];
					Arrey[j-1] = Arrey[j];
					Arrey[j] = tmp;
				}
			}
		
		}
		
		
		//打印排列好的数组 
		for (int i=0;i <Arrey.length; i++) {
			System.out.print(Arrey[i]+" ");
		}	
		
	}

	
	
	
	
}

 

 

 

猜你喜欢

转载自blog.csdn.net/qq_38125626/article/details/81127197