排序算法

冒泡排序(BubbleSort)

冒泡排序的时间复杂度为O(n^2)。

1.比较相邻的元素,前一个比后一个大(或者前一个比后一个小)调换位置

2.每一对相邻的元素进行重复的工作,从开始对一直到结尾对,这步完成后,结尾为最大或最小的数.

3.针对除了最后一个元素重复进行上面的步骤。

4.重复1-3步骤直到完成排序

动画演示:

实现代码:

package Array;
//冒泡排序
public class BubbleSort {
	public static void main(String[] args) {
		bubblesort();//调用方法
	}
	public static void bubblesort(){
		int arr[] = {5,3,2,9,1,7,8,6,4};
		//i表示轮数
		for(int i=0;i<arr.length-1;i++){
			for(int j=0;j<arr.length-i-1;j++){
				if(arr[j]>arr[j+1]){ //后者大于前者
					int temp = arr[j];
					arr[j] = arr[j+1]; //将arr[j+1]和arr[j]的位置互换
					arr[j+1] = temp;
				}
			}
		}
		for (int i = 0; i < arr.length; i++) { //遍历排序后的数组
			System.out.print(arr[i]+" ");
		}
	}
}

 

选择排序(Selection Sort)

以升序为例,第一趟,将数组中下标为0的元素和下标为1的元素进行比较,如果后面的元素比它小,则将下标为1的元素和下标为0的元素位置互换,然后再拿下标为0的元素和下标为2的元素进行比较.....下标为0的元素和所有元素排序完毕,再拿下标为2,3,4,......的元素按照上面流程继续进行排序。

动画演示:

实现代码:

package day05Array;
//选择排序 以升序排列
public class SelectedSort {
	public static void main(String[] args) {
		selectsort(); //调用方法
	}
	public static void selectsort(){
		int arr[]={5,3,2,9,1,7,8,6,4}; //定义数组
		for (int i = 0; i < arr.length-1; i++) { 
			for(int j =i+1;j<arr.length;j++){
				if(arr[i]>arr[j]){  //后面的元素大于前一个元素
                                        //进行位置互换
					int temp = arr[i]; 
					arr[i] = arr[j];
					arr[j] = temp;
				}
			}
		}
		for (int i = 0; i < arr.length; i++) { //遍历排序好的数组
			System.out.print(arr[i]+" ");
		}
	}
}

插入排序(Insertion-Sort)

它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。

  算法描述

 

动画演示:

 

  • 从第一个元素开始,该元素可以认为已经被排序;
  • 取出下一个元素,在已经排序的元素序列中从后向前扫描;
  • 如果该元素(已排序)大于新元素,将该元素移到下一位置;
  • 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置;
  • 将新元素插入到该位置后;
  • 重复步骤2~5。

实现代码:

package day05Array;
//插入排序
public class InsertSort {
	public static void main(String[] args) {
		insertSort();
	}
	public static void insertSort(){
		int[] arr={5,1,3,2,7,4,9,8,6};
		for(int i=1;i<arr.length;i++){
			int e=arr[i];
			int j=i-1;
			while(j>=0&&arr[j]>e){
				arr[j+1]=arr[j];
				j--;
			}
			arr[j+1]=e;
		}
		for(int i=0;i<arr.length;i++){
			System.out.print(arr[i]+" ");
		}
	}
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章