排序算法(插入、冒泡、选择、快速)

推荐链接:https://blog.csdn.net/lyhkmm/article/details/78920769

链接中很详细的说明了八种常见排序算法的思路和代码实现。

面试时通常会问到排序算法,所以就几种排序算法进行时间复杂度的比较和代码的实现。

一、时间复杂度

二、选择排序、冒泡排序、插入排序和快速排序的代码实现。

public class PaiXu {

	public static void main(String[] args) {

		int []num = {9,5,7,6,3,2,8};
		int temp,i;
		
		//冒泡排序    每次确定一个值放在后面
		for(i=0;i<num.length;i++)
			for(int j=0;j<num.length-i-1;j++) {
				if(num[j]>num[j+1]) {
					temp = num[j];
					num[j] = num[j+1];
					num[j+1] = temp;
				}
			}
		for(i=0;i<num.length-1;i++) {
			System.out.print(num[i]+" ");
		}
		System.out.println(num[i]);
		
		//选择排序    每次确定一个值放在前面
		for(i=0;i<num.length;i++)
			for(int j=i+1;j<num.length;j++) {
				if(num[i]>num[j]) {
					temp = num[i];
					num[i] = num[j];
					num[j] = temp;
				}
			}
		for(i=0;i<num.length-1;i++) {
			System.out.print(num[i]+" ");
		}
		System.out.println(num[i]);
		
		//插入排序    
        //第一个值固定,从第二个开始判断,第二个比第一个大就插入到第一个后面,第二个比第一个小菊插入到第一个的前面。
		for(i=1;i<num.length;i++) {
			int j;
			for(j=i-1;j>=0 && num[j]>num[i];j--) {
				
			}
			temp = num[i];
			for(int k=i;k>j+1;k--) {
				num[k] = num[k-1];
			}
			num[j+1] = temp;
		}
		for(i=0;i<num.length-1;i++) {
			System.out.print(num[i]+" ");
		}
		System.out.println(num[i]);
		
		//快速排序
		PaiXu.Quike(num,0,num.length-1);
		for(i=0;i<num.length-1;i++) {
			System.out.print(num[i]+" ");
		}
		System.out.println(num[i]);
	}
	
	//快速排序使用递归
	private static void Quike(int[] num,int start,int end) {
		if(start > end)
			return;
		int i = start;
		int j = end;
		int temp = num[i];
		int flag;
		while(i != j) {
			while(i<j && num[j]>=temp)
				j--;
			while(i<j && num[i]<=temp)
				i++;
			if(i<j) {
				flag = num[i];
				num[i] = num[j];
				num[j] = flag;
			}
		}
		flag = num[i];
		num[i] = num[start];
		num[start] = flag;
		
		Quike(num,start,i-1);
		Quike(num,j+1,end);
	}
}

猜你喜欢

转载自blog.csdn.net/camillect/article/details/82379707