排序3:簡單選擇排序

一,概述

(1)簡單選擇排序是一種選擇排序。

(2)選擇排序:每趟從待排序的記錄中選出關鍵字最小的記錄,與當前位置的數值進行交換,直到所有數據有序排列完成。

 

二。算法思想

 

(1)從待排序序列中,找到關鍵字最小的元素;

(2)如果最小元素不是待排序序列的第一個元素,將其和第一個元素互換;

(3)從餘下的N - 1個元素中,找出關鍵字最小的元素,

重複(1),(2)步,到結束。

例如,一組無序數列:9 1 2 5 7 4 8 6 3 5

                        

 

三.代碼

#include<stdio.h>
//每次和待排序 序列的 後面的元素 找到比當前數字 小的數值    進行交換
void Select(int *arr ,int len)
{
	int minindex = 0;
	int temp = 0;
	for(int i = 0;i<len ;i++)
	{
		 minindex = i;//設當前爲最小
		for(int j =i+1 ;j<len; j++ )  //從i後面的數據找  ,因爲前面已經有序
		{

			if(arr[j]<arr[minindex]) ////arr[j](i 後面的數據)與mindex 進行比較  如果arr[j] 更小,交換數據
			{
				temp =arr[j];
				arr[j] = arr[minindex];
				arr[minindex] = temp;
			}
		}
	}
}

void show(int *arr,int len)
{
	for(int i =0;i<len;++i)
	{
		printf("%d\t",arr[i]);
	}
}

int main()
{
	int arr[]={7,3,4,6,4,2.876,3,53,346};
	int len = sizeof(arr)/sizeof(arr[0]);
	Select(arr,len);
	show(arr,len);
	getchar();
	return 0;
}

四.時間複雜度和空間複雜度

 

 

          由於要對元素進行交換改變,簡單選擇排序是一種不穩定的算法;

          由於需要一個Temp來保存交換的臨時變量,所以空間複雜度爲O(1);

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章