1. 程式人生 > >直接選擇排序, 氣泡排序

直接選擇排序, 氣泡排序

排序工具類:

/** 
 * @projectName:Sort 
 * @fileName:SortUtil.java 
 * @packageName:club.younge.sort 
 * @date:2016年8月22日下午11:56:41 
 * @copyright (c) 2016, [email protected] All Rights Reserved. 
 * 
 */  
  
package club.younge.sort;

import java.util.Random;

/** 
 * @className:SortUtil 
 * @function: 排序工具類  
 * @reason:   包含排序演算法,生成隨機陣列,列印結果陣列等 
 * @date:     2016年8月22日 下午11:56:41
 * @author   Younge 
 * @version   
 * @since    JDK 1.8 
 * @see       
 */
public class SortUtil {
	
	public static final void generateRandomData(int[] data){
		Random random = new Random(20l);
		int len = data.length;
		for (int i = 0; i < len; i++) {
			data[i] = Math.abs(random.nextInt()%20);
			System.out.print(" "+ data[i]);
		}
	}
	
	public static final void printData(int[] data){
		int len = data.length;
		for (int i = 0; i < len; i++) {
			System.out.print(" "+ data[i]);
		}
	}
	
	public static final int[] directChooseBigSort(int[] data){
		int len = data.length;
		int temp;
		for (int i = 0; i < len; i++) {
			for (int j = i + 1; j < len; j++) {
				//直接選擇排序, 降序
				if(data[i] < data[j]){
					temp = data[i];
					data[i] = data[j];
					data[j] = temp;
				}
			}
		}
		return data;
	}
	
	public static final int[] directChooseSmallSort(int[] data){
		int len = data.length;
		int temp;
		for (int i = 0; i < len; i++) {
			for (int j = i + 1; j < len; j++) {
				//直接選擇排序, 升序
				if(data[i] > data[j]){
					temp = data[i];
					data[i] = data[j];
					data[j] = temp;
				}
			}
			
		}
		return data;
	}
	
	public static final int[] bubbleSmallSort(int[] data){
		int len = data.length;
		int temp;
		for (int i = 0; i < len; i++) {
			for (int j = 0; j < len - i -1; j++) {
				//最大的往下沉,一個i迴圈排好一個數, 一次排序輕的在上面
				if(data[j] > data[j + 1]){
					temp = data[j];
					data[j] = data[j + 1];
					data[j + 1] = temp;
				}
			}
		}
		return data;
	}
	
	public static final int[] bubbleBigSort(int[] data){
		int len = data.length;
		int temp;
		for (int i = 0; i < len; i++) {
			for (int j = 0; j < len - i -1; j++) {
				//最小的往下沉,一個i迴圈排好一個數, 一次排序重的在上面,反重力
				if(data[j] < data[j + 1]){
					temp = data[j];
					data[j] = data[j + 1];
					data[j + 1] = temp;
				}
			}
		}
		return data;
	}
	
	
}

排序測試類:

/** 
 * @projectName:Sort 
 * @fileName:SortTest.java 
 * @packageName:club.younge.test 
 * @date:2016年8月22日下午11:56:50 
 * @copyright (c) 2016, [email protected] All Rights Reserved. 
 * 
 */  
  
package club.younge.test;

import club.younge.sort.SortUtil;

/** 
 * @className:SortTest 
 * @function: 排序測試  
 * @reason:   
 * @date:     2016年8月22日 下午11:56:50
 * @author   Younge 
 * @version   
 * @since    JDK 1.8 
 * @see       
 */
public class SortTest {

	public static void main(String[] args) {
		int[] data = new int[20];
		
		System.out.print("Switch big sort:");
		System.out.print("\nBefore sort:");
		SortUtil.generateRandomData(data);
		
		data = SortUtil.directChooseBigSort(data);
		System.out.print("\nAfter sort:");
		SortUtil.printData(data);
		
		System.out.print("\n\nSwitch small sort:");
		System.out.print("\nBefore sort:");
		SortUtil.generateRandomData(data);
		data = SortUtil.directChooseSmallSort(data);
		System.out.print("\nAfter sort:");
		SortUtil.printData(data);
		
		System.out.print("\n\nBubble small sort:");
		System.out.print("\nBefore sort:");
		SortUtil.generateRandomData(data);
		data = SortUtil.directChooseSmallSort(data);
		System.out.print("\nAfter sort:");
		SortUtil.printData(data);
		
		System.out.print("\n\nBubble big sort:");
		System.out.print("\nBefore sort:");
		SortUtil.generateRandomData(data);
		data = SortUtil.directChooseSmallSort(data);
		System.out.print("\nAfter sort:");
		SortUtil.printData(data);
	}
}

排序類面向物件重構:

package club.younge.sort;

import java.util.Random;

/** 
 * @className:SortEntity 
 * @function: 排序實體類抽離陣列和陣列長度  
 * @reason:   TODO ADD REASON. 
 * @date:     2016年8月23日 下午1:54:19
 * @author   Younge 
 * @version   
 * @since    JDK 1.8 
 * @see       
 */
public class SortEntity {
	private int[] data;
	private int len;
	public SortEntity(int[] data){
		this.data = data;
		this.len = data.length;
		this.generateRandomData();
	}
	public int[] getData() {
		return data;
	}
	public void setData(int[] data) {
		this.data = data;
	}
	public int getLen() {
		return len;
	}
	public void setLen(int len) {
		this.len = len;
	}
	
	public final void generateRandomData(){
		Random random = new Random(20l);
		for (int i = 0; i < len; i++) {
			data[i] = Math.abs(random.nextInt()%20);
			System.out.print(" "+ data[i]);
		}
	}
	
	public  final void printData(){
		for (int i = 0; i < len; i++) {
			System.out.print(" "+ data[i]);
		}
	}
	
	public void println(String message){
		System.out.println(message);
	}
	
	public final int[] directChooseBigSort(){
		int temp;
		for (int i = 0; i < len; i++) {
			for (int j = i + 1; j < len; j++) {
				//直接選擇排序, 降序
				if(data[i] < data[j]){
					temp = data[i];
					data[i] = data[j];
					data[j] = temp;
				}
			}
		}
		return data;
	}
	
	public final int[] directChooseSmallSort(int[] data){
		int len = data.length;
		int temp;
		for (int i = 0; i < len; i++) {
			for (int j = i + 1; j < len; j++) {
				//直接選擇排序, 升序
				if(data[i] > data[j]){
					temp = data[i];
					data[i] = data[j];
					data[j] = temp;
				}
			}
			
		}
		return data;
	}
	
	public final int[] bubbleSmallSort(int[] data){
		int temp;
		for (int i = 0; i < len; i++) {
			for (int j = 0; j < len - i -1; j++) {
				//最大的往下沉,一個i迴圈排好一個數, 一次排序輕的在上面
				if(data[j] > data[j + 1]){
					temp = data[j];
					data[j] = data[j + 1];
					data[j + 1] = temp;
				}
			}
		}
		return data;
	}
	
	public  final int[] bubbleBigSort(int[] data){
		int temp;
		for (int i = 0; i < len; i++) {
			for (int j = 0; j < len - i -1; j++) {
				//最小的往下沉,一個i迴圈排好一個數, 一次排序重的在上面,反重力
				if(data[j] < data[j + 1]){
					temp = data[j];
					data[j] = data[j + 1];
					data[j + 1] = temp;
				}
			}
		}
		return data;
	}
	
	//非遞迴查詢插入點
	public final int[] secondDivide() {
		int left, right, middle, j;
		int comp;
		for (int i = 1; i < len; i++) {
			left = 0;
			right = i - 1;
			comp = data[i];// 比較點
			// 二分法尋找left插入點
			while (right >= left) {
				middle = (left + right) / 2;
				if (comp >= data[middle]) {
					left = middle + 1;
				} else {
					right = middle - 1;
				}
			}
			// left插入點(含)至比較點前一元素整體後移一個單位
			for (j = i - 1; j >= left; j--) {
				data[j + 1] = data[j];
			}
			// left插入點插入比較點元素
			data[left] = comp;
		}
		return data;

	}
	
	//遞迴查詢插入點
	public int[] secondDivideTraverse() {
		int left, right, j;
		int comp;
		for (int i = 1; i < len; i++) {
			left = 0;
			right = i - 1;
			comp = data[i];// 比較點
			// 二分法尋找left插入點
			left = this.findLeft(left, right, data, comp);
			// left插入點(含)至比較點前一元素整體後移一個單位
			for (j = i - 1; j >= left; j--) {
				data[j + 1] = data[j];
			}
			// left插入點插入比較點元素
			data[left] = comp;
		}
		return data;
	}

	public int findLeft(int left, int right, int[] data, int comp) {
		int m = (left + right) / 2;
		if (left > right) {
			return left;
		} else {
			if (comp >= data[m]) {
				return findLeft(m + 1, right, data, comp);
			} else {
				return findLeft(left, m - 1, data, comp);
			}
		}
	}
	
}

排序將持續更新,Github更新地址:點選開啟連結

相關推薦

排序演算法:選擇排序直接插入排序氣泡排序

package com.Algorithm.Search_Sort; import java.util.Arrays; public class Sort { public int array[] = {99,34,76,92,34,17,77,41,40,36,6}; //

C語言實現直接插入排序氣泡排序選擇排序希爾排序快排

     直接插入演算法,每次將未排序的第一個元素插入到前半部分以及排好序的元素中。關鍵是要在已排好的部分進行移位操作。//直接插入排序演算法 void InsertSort(int a[],int n) { for (int i = 1; i < n; i++) {

直接選擇排序 氣泡排序

排序工具類: /** * @projectName:Sort * @fileName:SortUtil.java * @packageName:club.younge.sort * @date:2016年8月22日下午11:56:41 * @copyri

各種排序演算法一步步更新(一)排序氣泡排序選擇排序快速排序

部分方法來自我關注的博主  J_小浩子  謝謝 1 桶排序  bucketsort 1 桶排序 #include <stdio.h>//桶排序基本說明 int main(){     int data1[11]={0},tem

python: 選擇排序氣泡排序插入排序快速排序

def selectSort(lyst): n = len(lyst) for i in range(n - 1): minindex = i for j in range(i + 1, n): if lyst[j] <

給一組整數按照升序排序使用選擇排序氣泡排序插入排序或者任何 O(n2) 的排序演算法

題目 描述 給一組整數,按照升序排序,使用選擇排序,氣泡排序,插入排序或者任何 O(n2) 的排序演算法。 樣例 對於陣列 [3, 2, 1, 4, 5], 排序後為:[1, 2, 3, 4, 5]。 解答 public class SortNums { pu

排序上篇(選擇排序氣泡排序插入排序希爾排序

1.選擇排序 (1)原理:  在要排序的一組數中,用第一個數與後面的數依次進行判斷,若大於後面的則進行交換;然後依次再用第二個數與後面的數進行交換,如此迴圈到倒數第二個數和最後一個數比較為止。 (2)圖解: 內層第一次迴圈如下:   外層控制迴圈次數:

java幾種排序簡單實現(快速排序氣泡排序直接插入排序

package Test; import com.alibaba.fastjson.JSONObject; public class Test { static int[] arrays = new int[] { 3, 10, 11, 1, 8, 2, 9, 4 }; // index

選擇排序氣泡排序

選擇排序 在一個長度為n的序列中,遍歷整個序列,找出其中最小(大)的元素,將其與未被選擇過的數中的第一個數進行交換,重複以上操作,直到所有數從小(大)到大(小)排列。 例如:6 4 7 3 2 8 2 4 7 3 6 8 2 3 7 4 6 8 2 3 47 6 8

選擇排序氣泡排序插入排序

1.選擇排序 2.氣泡排序/雙向氣泡排序 3.插入排序 1.選擇排序 選擇排序是一種最為直觀的排序方法。每次迴圈從陣列中選擇出一個最小或者最大的元素,按順序重新放入陣列中,直到所有的戴排序元素都排序完成。 public void selectSort(int

常用排序演算法java程式碼實現---快速排序氣泡排序選擇排序

快速排序 public class QuickSort { public void qSort(int[] arr,int left,int right) { if(left>right) { return ; } int i = le

python: 選擇排序氣泡排序插入排序快速排序

def selectSort(lyst): n = len(lyst) for i in range(n - 1): minindex = i for j in range(i + 1, n): if l

陣列(選擇排序氣泡排序

import java.util.Arrays; import javax.swing.text.StyledEditorKit.ForegroundAction; /* * 排序的兩種簡單演算法:選擇排序,氣泡排序 */ public class SequenceT

各種排序演算法的場景以及c++實現(插入排序希爾排序氣泡排序快速排序選擇排序歸併排序

對現有工作並不是很滿意,所以決定找下一個坑。由工作中遇到排序場景並不多,大都是用氣泡排序,太low,面試又經常問到一些排序演算法方面的東西。剛好讓小學妹郵的資料結構也到了。就把各種排序演算法重新總結一下,以作留存。 排序分為內部排序和外部排序,內部排序是在記憶體中排序。外

時間複雜度插入排序氣泡排序選擇排序

理解時間複雜度,插入排序,氣泡排序,選擇排序 什麼是時間複雜度 就是近似於約等於演算法總的執行的次數; 說白了時間複雜度就是近似約等於演算法中常數操作的次數; 時間複雜度使用O(n)(可以讀big O n)來表示 在一個演算法之中,演算法常數操作次數 * 每個數的常數操作的時間

插入排序希爾排序選擇排序快速排序氣泡排序歸併排序

插入排序 1、介紹:        簡單插入排序演算法原理:從整個待排序列中選出一個元素插入到已經有序的子序列中去,得到一個有序的、元素加一的子序列,直到整個序列的待插入元素為0,則整個序列全部有序。   在實際的演算法中

C語言單鏈表的3種排序演算法插入排序氣泡排序選擇排序

//插入排序 stu *view_sort_math(stu *head)   {       struct student *first;     struct student *t;       struct student *p;        struct student *q;        fi

幾種常用的排序演算法(快速排序希爾排序排序選擇排序氣泡排序

1、歸併排序      基本原理:歸併排序也稱合併排序,其演算法思想是將待排序序列分為兩部分,依次對分得的兩個部分再次使用歸併排序,之後再對其進行合併。操作步驟如下。(1)將所要進行的排序序列分為左右兩個部分,如果要進行排序的序列的起始元素下標為first,最後一個元素的

交換排序氣泡排序選擇排序

交換排序 for(int i=0;i<length-1;i++) { for(int j=i+1;j<length;j++) { if(arr[

C++DLL匯出類(快排堆排插入排序選擇排序氣泡排序)

sort.h #ifndef SORT_H #define SORT_H #ifdef DLL_FILE class __declspec(dllexport) sort #else class __declspec(dllimport) so