排序演算法之選擇排序

2021-08-23 11:59:01 字數 589 閱讀 3452

先找到陣列中最小的那個元素,其次,將它與陣列中第乙個元素互換位置(如果第乙個元素是最小元素,就跟自己交換位置)。再次,在剩下的元素中找到最小元素,將它與陣列中第二個元素交換位置。如此反覆,直到整個陣列排序。這種演算法之所以叫選擇排序,是因為它不斷的在查詢陣列中最小的元素。

在選擇排序中,交換元素的次數為n。演算法的效率取決於比較的次數。對於長度為n的陣列,選擇排序需要大約n²/2次比較和n次交換。

這是因為為了找出最小的元素而掃瞄一遍陣列並不能為下一遍掃瞄提供任何資訊。這樣就會引出乙個缺點,乙個已經有序的陣列或主鍵全部相同的陣列跟乙個元素隨機排列的陣列所用的排序時間是一樣長的。

每次交換都會改變兩個陣列元素的值,因此選擇排序演算法用了n次交換——交換次數跟陣列的大小是成線性關係。

public void sort(int nums) 

}// 交換第i個元素跟當前最小值

int temp = nums[i];

nums[i] = nums[min];

nums[min] = temp;

}for (int m = 0; m < nums.length; m++)

}

排序演算法 排序演算法之選擇排序

最近在學習排序演算法,就排序演算法中的四大經典排序 氣泡排序 快速排序 選擇排序 插入排序。會出一系列的講解排序演算法的部落格。今天繼快速排序之後整理一下選擇排序。選擇排序,就是從一列未排序的陣列中先選出最小 最大 的數,放在陣列的第一位,第一位原來的數字放在最小的原來的位置,再選出第二小的數,放在...

排序演算法之選擇排序 選擇排序 堆排序

直接選擇排序 如下 下面 是一次迴圈同時挑選出最大和最小數,並將其與左右交換 選擇排序 void selectionsort int a,int len swap a min a left 如果最大數的下標在為left,證明要交換的最大數已經被 換到min小標所表示的位置,只需要將right和min...

排序演算法之選擇排序

選擇排序 在乙個長度為n的無序陣列中,在第一趟遍歷n個資料,找出其中最小的數值與第乙個元素交換,第二趟遍歷剩下的n 1個資料,找出其中最小的數值與第二個元素交換.第n 1趟遍歷剩下的2個資料,找出其中最小的數值與第n 1個元素交換,至此選擇排序完成。平均時間複雜度 o n2 空間複雜度 o 1 用於...