【筆記】簡單選擇排序
簡單選擇排序是一種簡單的選擇類排序演算法,它是通過依次找到待排序元素序列中最小的資料元素,並將其放在序列的最前面,從而使待排序元素序列變為有序序列。
基本演算法思想:假設待排序的元素序列有n個, 在第一趟排序過程中,從n個元素序列中選擇最喜愛哦的元素,並將其放在元素序列的最前面即第一個位置。在第二趟排序過程中,從剩餘的n-1個元素中選擇最小的元素,將其放在第二個位置。依此類推,指導沒有待比較的元素,簡單選擇排序演算法結束。
例如一組元素的關鍵字序列為(76,31,19,20,6,83,60,52),則簡單選擇排序的過程如圖所示。
簡單選擇是一種不穩定的排序演算法,在最好的情況下,待排序元素序列按照非遞減排列,則不需要移動元素;在最壞的情況下,待排序元素按照飛抵增排列,則在每一趟排序都需要移動元素,以哦的那個元素的次數為3(n-1)。在任何情況下,簡單選擇排序演算法都需要進行n(n-1)/2次的比較。綜上所述,簡單選擇排序演算法的時間複雜度是
O(n^2)
。簡單選擇排序的空間複雜度是O(1)
。
- 型別定義
#define MaxSize 50
typedef int KeyType;
typedef struct /*資料元素型別定義*/
{
KeyType key;/*關鍵字*/
}DataType;
typedef struct /*順序表型別定義*/
{
DataType data[MaxSize];
int length;
}SqList;
- 簡單選擇排序函式
void SelectSort(SqList *L,int n)
/*簡單選擇排序*/
{
int i,j,k;
DataType t;
/*將第i個元素的關鍵字與後面[i+1...n]個元素的關鍵字比較,將關鍵字最小的的元素放在第i個位置*/
for(i=1;i<=n-1;i++)
{
j=i;
for(k=i+1;k<=n;k++) /*關鍵字最小的元素的序號為j*/
if(L->data[k].key<L->data[j].key)
j=k;
if(j!=i) /*如果序號i不等於j,則需要將序號i和序號j的元素交換*/
{
t=L->data[i];
L->data[i]=L->data[j];
L->data[j]=t;
}
}
}
- 主程式
#include<stdio.h>
#include<stdlib.h>
void InitSeqList(SqList *L,DataType a[],int n)
/*順序表的初始化*/
{
int i;
for(i=1;i<=n;i++)
{
L->data[i]=a[i-1];
}
L->length=n;
}
void DispList(SqList L,int n)
/*輸出表中的元素*/
{
int i;
for(i=1;i<=n;i++)
printf("%4d",L.data[i].key);
printf("\n");
}
void main()
{
DataType a[]={69,62,50,58,42,42,27,53};
SqList L;
int n=sizeof(a)/sizeof(a[0]);
InitSeqList(&L,a,n);
printf("[排序前] ");
DispList(L,n);
SelectSort(&L,n);
printf("[簡單選擇排序結果]");
DispList(L,n);
}
- 測試結果
相關文章
- 資料結構學習筆記-簡單選擇排序資料結構筆記排序
- 簡單選擇排序排序
- 簡單選擇排序就是簡單~~~排序
- 選擇排序的簡單理解排序
- 選擇排序就這麼簡單排序
- 簡單選擇排序(Simple Selection Sort)排序
- 基礎排序(冒泡、選擇、插入)學習筆記排序筆記
- 【小小前端】前端排序演算法第三期(不簡單選擇排序-堆排序)前端排序演算法
- 選擇排序排序
- 最簡單易懂的三種排序演算法:冒泡、選擇、插入排序演算法
- 選擇排序和快速排序排序
- 【JS面試向】選擇排序、桶排序、氣泡排序和快速排序簡介JS面試排序
- 淺解前端必須掌握的演算法(二):簡單選擇排序前端演算法排序
- js選擇排序JS排序
- 01選擇排序排序
- 選擇排序法排序
- Java 選擇排序Java排序
- 單連結串列的排序(插入,選擇,冒泡)排序
- 排序演算法:選擇排序排序演算法
- 排序演算法__選擇排序排序演算法
- 選擇排序和氣泡排序排序
- 氣泡排序與選擇排序排序
- 桶排序 選擇,插入排序排序
- docker簡單筆記Docker筆記
- 陣列選擇排序陣列排序
- C# 選擇排序C#排序
- CSS筆記——屬性選擇器CSS筆記
- 排序——選擇排序小練習(二)排序
- 排序——選擇排序小練習(一)排序
- 經典排序之選擇排序(Java)排序Java
- 選擇排序(python)實現排序Python
- 圖解選擇排序與插入排序圖解排序
- 氣泡排序和選擇排序流程圖排序流程圖
- PHP 排序演算法之選擇排序PHP排序演算法
- Python排序演算法之 選擇排序Python排序演算法
- 排序演算法入門:選擇排序排序演算法
- 氣泡排序和選擇排序詳解排序
- 排序演算法之「選擇排序(SelectionSort) 」排序演算法
- 排序演算法 - 氣泡排序和選擇排序排序演算法