數組內數值的排序

對數組內的值從小到大進行排序

1、選擇排序

原理:數組內第0個元素與第一個元素進行比較,如果第0個元素大於第一個元素,則交換位置,否則不變。第0個位置元素再與第2個元素進行比較,若第0個元素比較大,交換位置,否則不變,依此類推,直至第0個元素與最後一個元素進行比較。比較的結果是第0位存放的是數組內的最小值。

    第0個元素比較結束後,進行第1個元素的比較,步驟如第0個元素一樣,比較結束數組第1個位存放的是第二小的值,依此類推,完成比較,即可對數組內容進行排序。

public static void selectSort(int[] arr)
{
	for(int x=0; x<arr.length-1; x++)
	{
		for(int y=x+1; y<arr.length; y++)
		{
			if(arr[x]>arr[y])
			{
				int tmp = arr[x];
				arr[x] = arr[y];
				arr[y] = tmp;
			}
		}
	}
}

2、選擇排序法(優化)

        如1所述,當第0個數與其他數進行比較時,若第0個數比較大,則每次比較都需要交換位置,可以對代碼進行優化。若定義兩個變量,一個初始化爲第0個數,一個爲值對應的角標,用第一個變量和其他數進行比較,此變量記錄比較過程中的最小值,另一個變量記錄所對應的角標。比較完成後,將得到的最小值和第0個數進行交換位置。將數組第1個值賦給變量,再進行比較,得到第二小的值,和數組內第1個數交換位置,依此循環。這樣的話,每輪比較只會對數組進行一次交換位置,避免過多對堆內存進行操作,速度相對於第1種比較快。

public static void selectSort_2(int[] arr)
{
	for(int x=0; x<arr.length-1; x++)
	{
		int num = arr[x];
		int index = x;
		for(int y=x+1; y<arr.length; y++)
		{
			if(num>arr[y])
			{
				num = arr[y];
				index = y;
			}
		}
		if(index!=x)
		{
			int tmp = arr[x];
			arr[x] = arr[index];
			arr[index] = tmp;
		}
	}
}
3、冒泡排序法

原理:數組內第0個數和第1個數進行比較,若第0個數比較大,則交換位置,然後第1個數和第2個數進行比較,若大則交換位置,否則不變,依此類推,倒數第二個數和最後一個數進行比較,若大則交換位置,這樣比較下來,最後一個數必定是最大值。下一輪比較最後一個不用參加比較了。

    再從第0個數開始和第1個進行比較,若大則交換位置,第1個數和第2個數進行比較,依此類推,倒數第二個位置的數一定是第二大的數。按照這個規律進行,完成數組的排序。


public static void bublleSort(int[] arr)
{
	for(int x=0; x<arr.length; x++)
	{
		for(int y=0; y<arr.length-1-x; y++)
		{
			if(arr[y]>arr[y+1])
			{
				int tmp = arr[y];
				arr[y] = arr[y+1];
				arr[y+1] = tmp;
			}
		}
	}
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章