簡單選擇排序

簡單選擇排序是指一種排序算法,在簡單選擇排序過程中,所需移動記錄的次數比較少。最好情況下,即待排序記錄初始狀態就已經是正序排列了,則不需要移動記錄。

方法是設所排序序列的記錄個數為n。i取1,2,…,n-1,從所有n-i+1個記錄(Ri,Ri+1,…,Rn)中找出排序碼最小的記錄,與第i個記錄交換。執行n-1趟 後就完成了記錄序列的排序。

基本介紹

  • 中文名:簡單選擇排序
  • 外文名:Select Sort
  • 分類:數據結構
  • 定義:排序算法 數據結構
基本概念,相關運用,

基本概念

在簡單選擇排序過程中,所需移動記錄的次數比較少。最好情況下,即待排序記錄初始狀態就已經是正序排列了,則不需要移動記錄。
最壞情況下,即待排序記錄初始狀態是按第一條記錄最小,之後的記錄從小到大順序排列,則需要移動記錄的次數最多為3(n-1)。簡單選擇排序過程中需要進行的比較次數與初始狀態下待排序記錄序列的排列情況無關。當i=1時,需進行n-1次比較;當i=2時,需進行n-2次比較;依次類推,共需要進行的比較次數是(n-1)+(n-2)+…+2+1=n(n-1)/2,即進行比較操作的時間複雜度O(n^2),進行移動操作的時間複雜度為O(n)
簡單選擇排序是不穩定排序。

相關運用

C語言實現
簡單選擇排序算法原理:每次從左至右掃描序列,記下最小值的位置。
輸入10個數按從小到大的順序排列:
#include<stdio.h>main(){    int a[10],i,j,k,t;    printf("input10numbers:\n");    for(i=0;i<10;i++)    scanf("%d",&a[i]);    printf("\n");    for(i=0;i<10;i++)    {                t=i;        for(j=i+1;j<10;j++)         {            if(a[t]>a[j])          {            t=j;          }         }                int temp = a[i];                a[i]=a[t];                a[t]=temp;    }    printf("thesortednumbers:\n");    for(i=0;i<10;i++)        printf("%-3d",a[i]);}
C++實現
用C++描述算法如下:
template<class datatype>void seqlist<datatype>::insertsort(){    int i,j,k;    datatype temp;    for(i=0;i<last;i++)    {        k=i;        for(j=i+1;j<=last;j++)            if(data[j]<data[k])                k=j;        if(i!=k) //第i個元素與第k個元素交換        {            temp=data[k];            data[k]=data[i];            data[i]=temp;        }    }    delete_data(1);};
數據結構課本上算法
void Select_Sort(datatype R[],int n){   //對排序表R[1].....R[n]進行冒泡排法,n是記錄個數    for(i=1; i<n; i++)  /*做n-1趟選取*/    {        k=i;    /*在i開始的n-i+1個記錄中選關鍵碼最小的記錄*/        for(j=i+1;j<=n;j++)            if(R[j].key<R[k].key)                k=j;    /*k中存放關鍵碼最小記錄的下標*/        if(i!=k)    /*關鍵碼最小的記錄與第i個記錄交換*/        {            int temp;            temp=R[k];            R[k]=R[i];            R[i]=temp;        }    }}
Java實現
public class SimpleSort{    public static void sort(Comparable[] data){        //數組長度        int len=data.length;        for(int i=0; i<len; i++){            //記錄當前位置            int position = i;            //找出最小的數,並用position指向最小數的位置            for(int j=i+1; j<len; j++){                if( data[position].compareTo(data[j]) > 0 ) {                    position=j;                }//endif            }//endfor            //交換最小數data[position]和第i位數的位置            Comparable temp=data[i];            data[i]=data[position];            data[position]=temp;        }//endfor    }//endsort    public static void main(String[] args) {        //在JDK1.5版本以上,基本數據類型可以自動裝箱        //int,double等基本類型的包裝類已實現了Comparable接口        Comparable[] c={4,9,23,1,45,27,5,2};        sort(c);        for(Comparable data:c) {            System.out.println(data);        }    }}
Objective-C實現
+(void)sort:(NSMutableArray*)array{ inti,y,min; for(i=0;i<[arraycount];i++){ min=i; for(y=i+1;y<[arraycount];y++){ if([[arrayobjectAtIndex:min]intValue]>[[arrayobjectAtIndex:y]intValue]){ min=y; } } if(min!=i){ [arrayexchangeObjectAtIndex:iwithObjectAtIndex:min]; } } }
PHP實現
function sort_select( $arr ){    for( $i=0; $i<count($arr); $i++ ){        $t = $i;        for( $j=$i+1; $j<count($arr); $j++ ){            if( $arr[ $j ] < $arr[ $t ] ){                $t = $j;            }        }        if( $t != $i ){            $arr[ $i ] ^= $arr[ $t ];            $arr[ $t ] ^= $arr[ $i ];            $arr[ $i ] ^= $arr[ $t ];        }    }    return $arr;}
C#實現
public void SimpleSelectSort(int[] array){    int tmp=0;    int t=0;//最小數標記    for(int i=0; i<array.Length; i++)    {        t=i;        for(int j=i+1; j<array.Length; j++)    {    if(array[t]>array[j])    {        t=j;    }}tmp=array[i];array[i]=array[t];array[t]=tmp;Python3實現def select_sort(array):    lenth = len(array)    for i in range(lenth):        for j in range(i, lenth):            if array[j] < array[i]:                array[i], array[j] = array[j], array[i]    return array

相關詞條

熱門詞條

聯絡我們