算法一之简单选择排序
生活随笔
收集整理的這篇文章主要介紹了
算法一之简单选择排序
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、??選擇排序的思想
選擇排序的基本思想是:每一趟在n-i+1(i=1,2,…n-1)個記錄中選取關鍵字最小的記錄作為有序序列中第i個記錄。基于此思想的算法主要有簡單選擇排序、樹型選擇排序和堆排序。
簡單選擇排序的基本思想:第1趟,在待排序記錄r[1]~r[n]中選出最小的記錄,將它與r[1]交換;第2趟,在待排序記錄r[2]~r[n]中選出最小的記錄,將它與r[2]交換;以此類推,第i趟在待排序記錄r[i]~r[n]中選出最小的記錄,將它與r[i]交換,使有序序列不斷增長直到全部排序完畢。
//最小記錄不在下標i處,互交換數據if(minIndex!=i){temp =data[i];data[i]=data[minIndex];data[minIndex]=temp;}} }
?
二、算法實現
簡單算法:
public void selectionSort(int[] data){int temp; //臨時空間//data.length-1趟for(int i=0;i<data.length-1;i++){for(int j=i+1;j<data.length;j++){//交換,保存最小記錄在i空間if(data[i]>data[j]){temp =data[i];data[i]=data[j];data[j]=temp;}} } }?
優化的算法:
public void selectionSort(int[] data){int minIndex; //最小記錄下標int temp; //臨時空間//data.length-1趟for(int i=0;i<data.length-1;i++){//在i到data.length-1中匹配最小記錄minIndex=i; //默認最小值為第一個記錄 for(int j=i+1;j<data.length;j++){//保存最小記錄的下標if(data[minIndex]>data[j]){minIndex=j;}}//最小記錄不在下標i處,互交換數據if(minIndex!=i){temp =data[i];data[i]=data[minIndex];data[minIndex]=temp;}} }
?
三、復雜度
? ? 簡單選擇排序中,所需進行記錄移動的操作次數較少,其最小值為“0”,最大值為3(n-1)。
? ? 最好時間O(n2),最壞時間O(n2),平均時間O(n2)。輔助存儲O(1),不穩定,n小時較好。
? ? 然而,無論記錄的初始序列如何,所需進行的關鍵字間的比較次數相同,均為n(n-1)/2,因此,總的時間復雜度為O(n2)。
?
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的算法一之简单选择排序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 小米公司Redmi K70系列机型正式入
- 下一篇: 加州州长签署《维修权法案》,促进消费者自