Java排序算法之冒泡、選擇、插入、快速

JavaSort

Java經典排序算法代碼

2018-1-26更新:冒泡排序,選擇排序,插入排序,快速排序

1. 冒泡排序
  • 特色:效率低,實現簡單
  • 思想(從小到大排): 第1個數和第2個數比較,若是第1個數比第2個數小,則不動,若是第1個比第2個大,則交換。再比較第2個和第3個,若是第2個數比3個數小,則不動,若是第2個比第3個大,則交換。以此類推日後進行比較。一趟結束後,最大的數應該在最後一個(也可從後往前排)
public static void bubbleSort(int arr[]) {
	for(int i=0;i<arr.length-1;i++) {
		for(int j=0;j<arr.length-1-i;j++) {
			if(arr[j]>arr[j+1]) {
				int temp = arr[j];
				arr[j] = arr[j+1];
				arr[j+1] = temp;
			}
		}
	}
}
2. 選擇排序
  • 特色:效率低,容易實現。
  • 第一趟->第一個數和後面的數依次比較,大就換,小就不動,第一趟結束,第一個數爲最小的數。第二趟->第二個數和後面的數依次比較,大就換,小就不動,第二趟結束,第二個數爲第二小的數。
  • 參考文章:http://www.javashuo.com/article/p-oplypbmn-cn.html
public static void selectSort(int arr[]) {
	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;
			}
		}
	}
}
3. 插入排序
  • 特色:效率低,容易實現。
  • 分而治之的思想。就是把一串數字分紅有序和無序的兩部分。好比 8 3 2 5,首先把8當作有序(他就一個數,固然有序),而後 3 2 5就是無序的部分,再把3 2 5 中的 3 拿出來做爲有序的部分 和 以前排好的有序部分 8 進行比較,發現 3 比 8 小,交換 如今排好的有序部分爲 3 8,剩下的無序部分爲 2 5 ,在剩下無序部分中把 2 當作有序,和排好的 3 8 依次比較,發現比3 小 ,交換 ,如今左邊排好的是 2 3 8 ,還剩一個5.繼續依次和排好的比較,2 比 5小,不交換,3 比 5 小不交換, 8 比5 大,交換,因此新的數組 2 3 5 8。
  • 參考文章:http://www.javashuo.com/article/p-yntkcxox-u.html
public static void insertSort(int arr[]) {
	for(int i=1;i<arr.length;i++) {
		for(int j=i-1;j>=0;j--) {
			if(arr[j] > arr[j+1]) {
				int temp = arr[j];
				arr[j] = arr[j+1];
				arr[j+1] = temp;
			}
		}
	}
}
4. 快速排序
  • 特色:高效,時間複雜度爲nlogn。
  • 思想:設置2個指針low指向第一個數,指針high指向最後一個數,high從後往前找,和low的數比較,若是high的數比low的數小,交換.此時high不動,low從前日後找,找到一個數比high大,交換,直到low,high指向同一個數,結束第一次排序。
  • 參考文章:http://blog.csdn.net/as02446418/article/details/47395867
public static void quickSort(int arr[],int low,int high) {
		
	int start = low;
	int end = high;
	int key = arr[low];
	if(end<start) {
		return;
	}
	while(end>start) {
		//從後往前比
		while(end > start && arr[end] >= key) {//若是沒有比關鍵值小的,比較下一個,直到有比關鍵值小的交換位置,而後又從前日後比較
			end--;
			if(arr[end]<=key) {
				int temp = arr[end];
				arr[end] = arr[start];
				arr[start] = temp;
			}
		}
		//從前日後比
		while(end > start && arr[start]<=key) {//若是沒有比關鍵值大的,比較下一個,直到有比關鍵值大的交換位置
			start++;
			if(arr[start]>=key) {
				int temp = arr[start];
				arr[start] = arr[end];
				arr[end] = temp;
			}
		}
		//此時第一次循環比較結束,關鍵值的位置已經肯定了。
		//左邊的值都比關鍵值小,右邊的值都比關鍵值大,可是兩邊的順序還有多是不同的,進行下面的遞歸調用
	}
	//遞歸
	if(start>low) quickSort(arr,low,start-1);//左邊序列。第一個索引位置到關鍵值索引-1
	if(end<high) quickSort(arr,end+1,high);  //右邊序列。從關鍵值索引+1到最後一個
}

詳細代碼能夠去個人Github:https://github.com/weiliangchun/JavaSorthtml

Java初級開發技術交流羣:619201650。歡迎加入進行技術交流,禁止閒聊、鬥圖。git

相關文章
相關標籤/搜索