七個常見的排序,目前暫時完成了四個很快補全並給出講解

x1ao4i發表於2020-10-21
//氣泡排序
public void bubbleSort(int[] arr) {
	int len = arr.length;
	for(int i=0;i<len-1;i++) {
		for(int j=1;j<len-i;j++) {
			if(arr[j-1]>arr[j]) {
				swap(arr,j-1,j);
			}
		}
	}
}

//選擇排序
public void selectSort(int[] arr) {
	int len = arr.length;
	
	for(int i=0; i<len-1; i++) {
		int curmax = arr[0];
		int loc = 0;
		for(int j=0; j<len-i; j++) {
			if(arr[j]>curmax) {
				curmax = arr[j];
				loc = j;
			}
		}
		swap(arr,loc,len-i-1);
	}
}

//快速排序
public void quickSort(int[] arr,int s,int e) {
	if(e<=s) return; 
	int p = partition(arr,s,e);
	swap(arr,p,s);
	quickSort(arr,s,p-1);
	quickSort(arr,p+1,e);
}

public int partition(int[] arr,int s,int e) {
	int temp = arr[s];
	int s1=s,e1=e+1;
	while(true) {
		while(arr[--e1]>temp);
		while(s1<e && arr[++s1]<temp);
		if(s1<e1) {
			swap(arr,s1,e1);
		}else {
			return e1;
		}
	}
}
//歸併排序

//插入排序
public void insertSort(int[] arr) {
	int len = arr.length;
	int temp;
	for(int i=1; i<len; i++) {
		temp = arr[i];
		int loc = i;				//loc代表當前正在比對的元素的位置
		for(int j=i-1; j>=0; j--) {
			if(temp<arr[j]) {
				arr[loc] = arr[j];
				loc = j;
			}
		}
		arr[loc] = temp;			
	}
}

//希爾排序

//堆排序


public void swap(int[] arr, int i, int j) {
	int temp = arr[i];
	arr[i] = arr[j];
	arr[j] = temp;
}

相關文章