Java 简单排序

  • 对简单排序 做个记录 ,方便回顾。
  • 1.冒泡排序
  • 原理:
  • 代码演示
  • 2.选择排序
  • 原理:
  • 代码演示
  • 3.插入排序
  • 原理:
  • 代码演示


对简单排序 做个记录 ,方便回顾。

1.冒泡排序

原理:

  • 比较两个相邻的元素,将值大的元素交换到右边。
  • 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对,这样,最后的元素应该会是最大的数。
  • 针对所有的元素重复以上的步骤,除了最后一个。
  • 持续重复上面的步骤,直到没有任何一对元素需要比较。

代码演示

public static void bubbleSort(int []array) {
		 
		 if(array ==null||array.length<=1) {
			 return ;
		 }
		 int temp ;
		 // 排序 
		 for(int  i = 0;i<array.length-1;i++) {
			 //两两比较,每次将最大放置在最后,每次循环一次,循环里就少比较一次
			 for(int j = 0;j<array.length-1-i;j++) {
				 if(array[j]>array[j+1]) {
					 temp = array[j];
					 array[j] = array[j+1];
					 array[j+1] = temp;
				 }
			 }
			 
		 }
		 
		 
		 System.out.println(Arrays.toString(array));
	 }

2.选择排序

原理:

  • 对比数组中前一个元素跟后一个元素的大小,如果后面的元素比前面的元素小则用一个变量k来记住他的位置,接着第二次比较,前面“后一个元素”现变成了“前一个元素”,继续跟他的“后一个元素”进行比较如果后面的元素比他要小则用变量k记住它在数组中的位置(下标),等到循环结束的时候,我们应该找到了最小的那个数的下标了,然后进行判断,如果这个元素的下标不是第一个元素的下标,就让第一个元素跟他交换一下值,这样就找到整个数组中最小的数了。
  • 以此类推,重复上面步骤找第二小的数,第三小的数。。。

代码演示

public static void selectionSort(int []array) {
		 if(null==array||array.length<1) {
			 return ;
			 
		 }
		 
		 int minIndex;
		 int temp;
		for(int i = 0;i<array.length;i++) {
		   minIndex = i;//每一轮循环开始,假设初始值为i至array.length-1中的最小值
			for(int j = i;j<array.length;j++) {
				if(array[j]<array[minIndex]) {
					minIndex = j;//当发现有更小的值时,更新下标
				}
			}
			//将这一轮找出的最小值 放到对应的位置,即位置交换
			//每一轮结束,i对应位置存放的都是当前循环中最小的值
			temp = array[i];
			array[i] = array[minIndex];
			array[minIndex] = temp;
		}
		
		System.out.println(Arrays.toString(array));
		 
	 }

3.插入排序

原理:

  • 将n个元素的数列分为已有序和无序两个部分。
  • 每次处理就是将无序数列的第一个元素与有序数列的元素从后往前逐个进行比较,找出插入位置,将该元素插入到有序数列的合适位置中。
    例如:现有一个无序数组[a,b,c,d,e],这里以字母代表数字,假设此时要对数字c进行排序,它先和b比较,若是c<b,则将b的值放到c的位置,然后c再和a比较,若是c<a则重复上面操作,反之,则将c放在b之前的位置,以次类推,直至排序完成。

代码演示

public static void insertSort(int array[]) {
		if(array.length<=1) {
			return;
		}
		int current;
		int preIndex;
		for(int i = 0;i<array.length-1;i++) {
		    //每次循环前,i下标之前的数都已排好序,默认i=0时也已排好序
			preIndex = i;
			current = array[preIndex+1];
			while(preIndex>=0 && current<array[preIndex]) {
			    //将前一个元素往后移
				array[preIndex+1] = array[preIndex];
				//接着往前比较,直至不满足条件
				preIndex--;
			}
			//当current值比第一位元素还小或者current>=array[preIndex]时,将元素放在preIndex位置的后面即preIndex+1位置
			array[preIndex+1] = current;
		}
		
		System.out.println(Arrays.toString(array));
	}