下面我介紹兩種選擇排序的方法:
一.選最小的或最大的(我以最小的爲列)
這種方法的思路爲:
1.在數組中選出最小的數值,放在a[0]位置。
2.選出次小的放在a[1]位置。
3.就這樣一直選,直到排好數列。
實現代碼:
#include<assert.h> void SelectSort(int *arr, int size ) { assert(arr ); int min; for (int i = 0; i < size; i++) { min = i; //選出最小的數,把最小數的下標給成min for (int j = i + 1; j < size ; j++) { if (arr [j]< arr[min]) { min = j; } } //把最小的數放在i位置 int tmp = arr [i]; arr[i] = arr [min]; arr[min] = tmp; } } void Print(int *arr, int size ) { for (int i = 0; i < size; i++) { cout << arr[i] << " " ; } cout << endl; }
test.cpp
#include<iostream> using namespace std; #include "Sort.h" void Test() { int arr[] = { 3, 9, 7, 6, 1, 2, 4, 8, 0, 5 }; SelectSort(arr, sizeof(arr) / sizeof(arr[0])); Print(arr, sizeof(arr) / sizeof(arr[0])); } int main() { Test(); system("pause"); return 0; }
二、選最大和最小的
思路:
1.選出最大最小放在兩邊。
2.一直這樣選,直到選完爲止。
void SelectSort_OP(int *arr, int size ) { assert(arr ); int left = 0; int right = size - 1; while (left < right) { int min = left; int max = right; //選出最大和最小的放在兩邊,然後縮小區間,循環 for (int i = min; i < right; i++) { if (arr [i] < arr[min]) { swap( arr[i], arr [min]); } else if (arr[i]> arr[max]) { swap( arr[i], arr [max]); } } ++left; --right; } }