1. 程式人生 > >【C語言】利用選擇法進行從小到大排序

【C語言】利用選擇法進行從小到大排序

選擇法思路:

取其中的最大值與最後一個數進行交換

假設一共有6個數組,我們用選擇法進行從小到大的排序;

6,5,4,2,3,1

第一次: 【6,5,4,2,3,1】->> 【1,5,4,2,3,6】

第二次:【1,5,4,2,3】,6 ->>【1,3,4,2,5,6】

第三次:【1,3,4,2】,5,6 ->> 【1,3,2,4,5,6】

第四次:【1,3,2】,4,5,6 ->【1,2,3,4,5,6】

第五次:【1,2】,3,4,5,6 ->【1,2,3,4,5,6】

程式碼實現:

#include "stdio.h"

int GetMaxPos(int arr[],int n){
	//利用選擇法思路,這個函式的功能是獲取到arr陣列中前n項最大值的座標
	int i,MaxPos = 0;//我認為第一個是最大的
	for(i = 0;i <= n - 1;i++){
		if(arr[MaxPos] < arr[i+1]){
			MaxPos = i + 1;
		}
	}
	return MaxPos;
}

void Sort(int arr[],int n){
	//吧陣列虛擬出來,並將最大的值與最後一個值做交換
	int i,temp;
	for(i = n-1;i > 1;i--){
		//將最大值和最後一個值進行交換
		temp = arr[GetMaxPos(arr,i)];
		arr[GetMaxPos(arr,i)] = arr[i];
		arr[i] = temp;
	}
}


int main(){
	int arr[] = {1,6,3,4,5,3,4,3,2,2,1,5,4,5,3};
	int i;
	//printf("%d",GetMaxPos(arr,5));
	int size = sizeof(arr)/sizeof(int);//獲取陣列長度
	Sort(arr,size);
	for(i = 0;i < size;i++){
		printf("%d\t",arr[i]);
	}
	return 0;
}

執行結果: