1. 程式人生 > >java學習 選擇排序的優化

java學習 選擇排序的優化

之前學到的選擇排序(部落格前篇)是第一個無序元素與其他元素依次比較,其中每次比較存在前面元素大於後面元素就交換。這樣在堆記憶體中交換的次數就比較頻繁,但其實一輪過後是找到最小元素與無序區第一個元素交換。

new:我們大可在記憶體建立兩個變數來儲存每次比較的較小值和較小值的下標,每次比較就重新整理。

public static void selectSort(int[] arr)          //未優化的選擇排序
    {  
        for(int x = 0;x<arr.length-1;x++)        //從第一個元素開始,共進行arr.length-1輪,就是外層迴圈。  
        {  
            for(int y = x+1;y<arr.length;y++)       //內層迴圈比較是第一個無序元素從比較第二個無序元素開始  
            {  
                if(arr[x]>arr[y])               //如果第一個無序元素比所比元素大時,交換元素。  
                {  
                    int temp = arr[x];  
                    arr[x] = arr[y];  
                    arr[y] = temp;  
                }  
            }  
        }  
    } 

----------------------------------------------------------------------------------------------------------------------------------

public static void selectSort2(int[] arr)		//優化後的選擇排序
	{
		for(int x = 0;x<arr.length-1;x++)		//與之前一樣,外層迴圈確定輪數,共有arr.length-1 輪
		{
			int num = arr[x];			//將每輪開始的元素值賦給棧記憶體的num
			int index = x;				//將每輪開始元素的下標賦給棧記憶體的index
			for(int y = x+1;y<arr.length;y++)	//與之前一樣,內層迴圈確定比較次數
			{
				if(num>arr[y])		//如果比較過程中,num的值比所比較的值大,則用較小值重新整理num的值,並將下標賦給index
				{
					num = arr[y];
					index = y;
				}
			}
			if(index!=x)			//減少判斷 如果每輪的第一個元素就是此輪比較的最小值 那麼他不用和自己交換
							//如果不同,則交換
			{
				int temp = arr[index];
				arr[index] = arr[x];
				arr[x] = temp;
			}
		}
	}

相關推薦

java學習 選擇排序優化

之前學到的選擇排序(部落格前篇)是第一個無序元素與其他元素依次比較,其中每次比較存在前面元素大於後面元素就交換。這樣在堆記憶體中交換的次數就比較頻繁,但其實一輪過後是找到最小元素與無序區第一個元素交換。new:我們大可在記憶體建立兩個變數來儲存每次比較的較小值和較小值的下標,

Java中陣列的選擇排序選擇排序優化

選擇排序: 思路: int arr[]= {5,6,2,4,3,1}; //這個"[]“放在arr後面也是可以的,和C語言一樣 流程: 第一輪比較 if(arr[0]>arr[1]){ //這裡 5不大於6,什麼都不做 int tem

Java學習筆記——排序算法之O(n²)排序

blog sel != 而是 while bsp 優化 ++ logs 男兒何不帶吳鉤,收取關山五十州。請君暫上淩煙閣,若個書生萬戶侯?                               ——南園十三首 三種排序法: 1、冒泡法 2、簡單選擇法 3、直接插入法

Java學習筆記——排序算法之進階排序(堆排序與分治並歸排序

進行 技術分享 ring http 沒有 oid 有序 重復 調整 春蠶到死絲方盡,蠟炬成灰淚始幹               ——無題 這裏介紹兩個比較難的算法: 1、堆排序 2、分治並歸排序 先說堆。 這裏請大家先自行了解完全二叉樹的數據結構。 堆是完全二叉樹。

數據結構與算法之美專欄學習筆記-排序優化

str 原則 選擇排序 .com 實現一個函數 一個數 原因 通用 並排 選擇合適的排序算法 回顧 選擇排序算法的原則 1)線性排序時間復雜度很低但使用場景特殊,如果要寫一個通用排序函數,不能選擇線性排序。 2)為了兼顧任意規模數據的排序,一般會首選時間復雜度為O(nl

資料結構與演算法之美專欄學習筆記-排序優化

選擇合適的排序演算法 回顧   選擇排序演算法的原則 1)線性排序時間複雜度很低但使用場景特殊,如果要寫一個通用排序函式,不能選擇線性排序。 2)為了兼顧任意規模資料的排序,一般會首選時間複雜度為O(nlogn)的排序演算法來實現排序函式。 3)同為O(nlogn)的快排和歸併排序相比,

JAVA Python 選擇排序

選擇排序:每圈要比較的第一個元素與該元素後面的陣列元素依次比較到陣列的最後一個元素,把小的值放在第一個陣列元素中,陣列迴圈一圈後,則把最小元素值互換到了一個元素中。陣列再迴圈一圈後,把第二小的元素值互換到了第二個元素中。按照這種方式,陣列迴圈多圈以後,就完成了陣列元素的排序。 1.使用for迴圈

演算法導論學習||選擇排序

選擇排序簡單得說就是找出最小的和第一個數交換,再找出次小的數與第二個數交換……以這樣的方法進行排序。 下面是自己用java實現的演算法: public class selection_sort {

java學習-氣泡排序

思想很簡單,實現也很簡單,小的放前面,大的放後面,兩兩比較即可,下面是程式碼 package maopao; import java.util.Arrays; public class maopao{     int[] numbers= new int[] {1,2,5

Java演算法——選擇排序

選擇排序 前言 選擇排序的演算法太過複雜,因為每一次都要完全遍歷整個陣列確定了最值才能進行下一次的迴圈,是一種不穩定的排序,時間複雜度是n²,相對來說適用於數量較小的排序中,而不太適用於大量的資料進行排序。 選擇排序描述 選擇排序,就是每次遍歷挑選出來最值和前面的值依次進行交

java實現---選擇排序---堆排序

選擇排序和堆排序 選擇排序 堆排序 選擇排序 選擇排序就是在一個元素集合中 選擇一個最大的資料元素 如果它不是最後一個元素,則將它與這組元素的最後一個交換;

排序演算法Java實現——選擇排序(直接選擇排序

比較排序程式碼: /*@(#)chooseSort.java 2017-4-22 * Copy Right 2017 Bank of Communications Co.Ltd. * A

java學習-插入排序

從第一個元素開始,該元素可以認為已經被排序 取出下一個元素,在已經排序的元素序列中從後向前遍歷 如果該已經排序的元素大於等於新元素,將該已經排序的元素移到下一位置 重複步驟,直到找到已排序的元素小於或者等於新元素的位置 下面是程式碼 package charu;

演算法學習——選擇排序

選擇排序,顧名思義就是要把元素選擇出來進行排序,要選擇,肯定就要有比較,這個時候我們的兩層for迴圈就派上用場了。 假設我們要對一個數組a進行排序,我們要定義兩個臨時變數(替身),一個是為陣列中順序即將發生變化的元素做替身,一個是為了代替陣列的下標,首先第一層for,我們要

JAVA語法——選擇排序

排序 pub stat code 交換 sys != [] int package 選擇排序; public class 選擇排序 { public static void main(String[] args) { int [] arr

java演算法-選擇排序

 選擇排序演算法特點: >每一輪找出一個最小值或者最大值,依次放在最前面的位置。在查詢的過程中,用當前假定的最小值或者最大值,去跟後面所有的值進行比較。如果小或者大,就把下標給那個假定的值。一輪迴圈完了之後,再次判斷,那個當初假定的最小或者最大,是否在一輪比較之後,發生過變化,如果變化了,那假定的值就

再次學習快速排序——優化

今天,我學習了一些優化快速排序的方法。 附上程式碼: (優化前的程式碼為被註釋掉的程式碼,優化後的程式碼我也用中文註釋加以說明了) #include <stdio.h> void

java實現選擇排序演算法

選擇排序(Selection sort)是一種簡單直觀的排序演算法。它的工作原理如下。首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然後,再從剩餘未排序元素中 繼續尋找最小(大)元素,然後放到已排序序列的末尾。以此類推,直到所有元素均排序完畢。 下面是

Java選擇排序的程式碼實現

public class ChoiseDemo {/*** 選擇排序:從0索引開始,依次和後面的元素比較,小的往前放,第一次完畢,最小值出現在最小索引處。* @param args*/public static void main(String[] args) {int a

Java選擇排序演算法

這個相對簡單點,我想法是鎖定每一次排序的邏輯表達,截斷陣列,就是找到最小的拿出來,放前面,再找出最小的放剩下的部分的前面。 類部分:selection_sort.Javapackage algorithm; public class selection_sort {