Java的常见排序之代码实现。

简单的用代码实现常见的排序算法。。。

(1)冒泡排序

package sort;
/*
 * 冒泡排序 O(n²)
 * 比较相邻的元素。如果第一个比第二个大,就交换他们两个。  
 * 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。  
 * 针对所有的元素重复以上的步骤,除了最后一个。
 * 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。 
 * @param arr 需要排序的整型数组
 */
public class bubbleSort {
	public void bubbleSort() {
		int[] arr = {13,8,6,11,5,9,4};
		System.out.println("排序前:");
		for(int num:arr) {
			System.out.print(num+" ");
		}
		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] = temp;
				}
			}
		}
		System.out.println();
		System.out.println("排序后:");
		for(int num:arr) {
			System.out.print(num+" ");
		}
	}
	
	public static void main(String[] args) {
		bubbleSort mp = new bubbleSort();
		mp.bubbleSort();
	}
}

(2)插入排序

package sort;
/**  
 * 插入排序 O(n²)
 * 从第一个元素开始,该元素可以认为已经被排序
 * 取出下一个元素,在已经排序的元素序列中从后向前扫描 
 * 如果该元素(已排序)大于新元素,将该元素移到下一位置  
 * 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置  
 * 将新元素插入到该位置中  
 * 重复步骤2
 */
public class insertSort {
	public static void main(String[] args) {
		int[] arr = {13,6,5,17,2,26};
		System.out.println("排序前:");
		for(int num:arr) {
			System.out.print(num+" ");
		}
		for(int i=0;i<arr.length;i++) {
			for(int j=i;j>0;j--) {
				if(arr[j]<arr[j-1]) {
					int temp = arr[j-1];
					arr[j-1] = arr[j];
					arr[j] = temp;
				}
			}
		}
		System.out.println();
		System.out.println("排序后:");
		for(int num:arr) {
			System.out.print(num+" ");
		}
	}
}

(3)快速排序

package sort;
/*
 * 快速排序:O(nlog2n)
 * 通过一趟排序将待排序记录分割成独立的两部分
 * 其中一部分记录的关键字均比另一部分关键字小
 * 分别对这两部分继续进行排序
 * 直到整个序列有序
 */
public class quickSort {
	private void swap(int[] arr,int i,int j) {
		int temp = arr[i];
		arr[i] = arr[j];
		arr[j] = temp;
	}
	int partition(int[] arr,int l,int r) {
		int p = arr[r];
		//将小于p的元素移到左边
		//将大于p的元素移到右边
		int index = 1;
		for(int i=index;i<r;++i) {
			if(arr[i]<p) {
				swap(arr,index++,i);
			}
		}
		swap(arr,index,r);
		return index;
	}
	public void sort(int[] arr,int l,int r) {
		if(l<r) {
			int q = partition(arr,l,r);
			//对左边进行排序
			sort(arr,l,q-1);
			//对右边进行排序
			sort(arr,q+1,r);
		}
	}
}

class demo {
	public static void main(String[] args) {
		int[] arr = {11,5,7,12,9,4,3};
		quickSort qs = new quickSort();
		qs.sort(arr, 0, arr.length-1);
		for(int i=0;i<arr.length;i++) {
			System.out.println(arr[i]+" ");
		}
	}
}
(4)选择排序

package sort;
/**
* 选择排序算法  O(n²)
* 在未排序序列中找到最小元素,存放到排序序列的起始位置  
* 再从剩余未排序元素中继续寻找最小元素,然后放到排序序列末尾。 
* 以此类推,直到所有元素均排序完毕。 
*/
public class selectSort {
	public static void  main(String[] args) {
		int[] arr = {1,23,4,2,11,65};
		System.out.println("交换之前:");
		for(int num:arr) {
			System.out.print(num+" ");
		}
		//选择排序优化
		for(int i=0;i<arr.length-1;i++) {
			int k = i;
			for(int j=k+1;j<arr.length;j++) { //选择最小的记录下来
				if(arr[j]<arr[k]) {
					k = j; //记下目前最小值的位置
				}
			}
			//在内层循环结束,找到最小值之后,再进行交换
			if(i!=k) {
				int temp = arr[i];
				arr[i] = arr[k];
				arr[k] = temp;
			}
		}
		System.out.println();
		System.out.println("交换后:");
		for(int num:arr) {
			System.out.print(num+" ");
		}
	}

}


猜你喜欢

转载自blog.csdn.net/vandet100/article/details/78558416