几种排序算法小结

//冒泡排序
public class BubbleSort {
	void bubbleSort(int []mp){
		for (int i = 0; i < mp.length; i++) {
			for (int j = 0; j <i; j++) {
				if(mp[j]>mp[j+1]){
					int temp=mp[j];
					mp[j]=mp[j+1];
					mp[j+1]=temp;
				}
				
			}
			
		}
	}

}


//插入排序
//思想:后面一个跟前面所有的进行排序
public class InsertSort {
	void insertSort(int []cr){
		for(int i=0;i<cr.length;i++){
			for(int j=0;j<i;j++)
			{
				if(cr[i]<cr[j]){
					int temp=cr[i];
					cr[i]=cr[j];
					cr[j]=temp;
				}
				            
			}
		}
	
	}

}


//选择排序
public class SelectSort {
	void selectSort(int []xz){
		int k=0;
		for (int i = 0; i < xz.length; i++) {
			int temp=xz[i];
			k=i;
			for (int j = i; j < xz.length; j++) {
				
				if(temp>xz[j]){
					 temp=xz[j];
					 k=j;
				}
			}
			xz[k]=xz[i];
		   	xz[i]=temp;
		   	
		}
	
	}

}


//快速排序
public class QuickSort {
	void quickSort(int qs[]){
		int len=qs.length;
		
		quickSort2(qs, 0,len-1);
	}
	void quickSort2(int qs[],int left,int right){
		int pos;
		if(left<right){
			pos=findPos(qs,left,right);
			quickSort2(qs,left,pos-1);
			quickSort2(qs,pos+1,right);
		}
		
	}
	int findPos(int qs[],int left,int right){
		int val=qs[left];
		while (left<right) {
			while((val<=qs[right])&&(left<right))
				right--;
			qs[left]=qs[right];
			while((val>=qs[left])&&(left<right))
				left++;
			qs[right]=qs[left];
		
		}
		qs[left]=val;
		return left;
	}
	}

//归并排序
		int a[]={1,3,5,7,9,10,13};
		int b[]={2,4,6,8,9};
		int c[]=new int[12];//注意此数组的写法,不能写成int c[]={};
		MergerSort mergerSort=new MergerSort();
		mergerSort.mergerSort(a, a.length, b, b.length, c);
		for (int i = 0; i < c.length; i++) {
			System.out.print(c[i]+" ");
		}

//归并排序的初衷是合并两个有序的数列,让其变成一个有序的数列
public class MergerSort {
	void mergerSort(int a[], int m, int b[], int n, int c[]) {
		int i = 0;
		int j = 0;
		int k = 0;
		while (i < m && j < n) {
			if (a[i] < b[j]) {
				c[k++] = a[i++];
			} else {
				c[k++] = b[j++];
			}
		}
		while (i < m) {
			c[k++] = a[i++];
		}
		while (j < n) {
			c[k++] = b[j++];
		}
	}
}
/*快排,归并排,堆排序时间复杂度相同,但它们三者区别是快速排序和堆排序是不稳定的,
归并为稳定型,对于辅助空间堆排序要求最小,归并最多,它们排序的最好情况复杂度相同,
最坏的情况下快速排序要复杂些,根据数据的数量来说,选择归并或堆,
如果还要求考虑辅助空间,就用堆排序,在涉及稳定性方面则考虑归并(虽然所需空间较多)。
所以,选择那个排序要看题目要求........*/

你可能感兴趣的:(排序算法)