#include "stdio.h" #include "stdlib.h" /* 1. n个记录的文件的直接选择排序可经过n-1趟直接选择排序得到有序结果。 2. 初始状态:无序区为R[1...R], 有序区为空 3. 第1趟 选择最小的R[k]元素,使其与R[1]交换。此时有序区增加1,为R[1...1]; 无序区为R[2...R]。 4. 第 i 趟走完 有序区更新为R[1...i], 无序区为R[i+1...R]。 */ void selectSwap(int arr[], int j, int min) { int tmp = arr[j]; arr[j] = arr[min]; arr[min] = tmp; } //选择排序主循环 void selectSort(int arr[], int len) { int min = 0; for (int i = 0; i < len - 1; i++){ min = i; for (int j = i + 1; j < len; j++){ if (arr[j] < arr[min]){ selectSwap(arr, j, min); } } } } //打印数组元素 void printSelect(int arr[], int len){ for (int i = 0; i<len; i++) printf("%d\t", arr[i]); printf("\n"); } int main() { int arr[10] = { 3, 5, 1, -7, 4, 9, -6, 8, 10, 4 }; int arrLen = sizeof(arr) / sizeof(arr[0]); //打印原数组 printSelect(arr, arrLen); //执行选择排序 selectSort(arr, arrLen); //打印排序后的数组 printSelect(arr, arrLen); //暂停终端窗口 system("pause"); return 0; }
2. C++版本:
#include "iostream" #include "cstdlib" using namespace std; /* 1. n个记录的文件的直接选择排序可经过n-1趟直接选择排序得到有序结果。 2. 初始状态:无序区为R[1...R], 有序区为空 3. 第1趟 选择最小的R[k]元素,使其与R[1]交换。此时有序区增加1,为R[1...1]; 无序区为R[2...R]。 4. 第 i 趟走完 有序区更新为R[1...i], 无序区为R[i+1...R]。 */ template<typename T> void selectSwap(T arr[], int j, int min) { T tmp = arr[j]; arr[j] = arr[min]; arr[min] = tmp; } //选择排序主循环 template<typename T> void selectSort(T arr[], int len) { int min = 0; for (int i = 0; i < len - 1; i++){ min = i; for (int j = i + 1; j < len; j++){ if (arr[j] < arr[min]){ selectSwap(arr, j, min); } } } } //打印数组元素 template<typename T> void printSelect(T arr[], int len){ for (int i = 0; i<len; i++) cout << arr[i] << ‘ ‘; cout << endl; } int main() { //整型排序 int arr[10] = { 3, 5, 1, -7, 4, 9, -6, 8, 10, 4 }; int arrLen = sizeof(arr) / sizeof(arr[0]); //打印原数组 printSelect(arr, arrLen); //执行选择排序 selectSort(arr, arrLen); //打印排序后的数组 printSelect(arr, arrLen); //浮点型排序 double arrf[] = { 17.5, 19.1, 0.6, 1.9, -10.5, 12.4, 3.8, 19.7, 1.5, 25.4, 28.6, 4.4, 23.8, 5.4 }; arrLen = sizeof(arrf) / sizeof(arrf[0]); //打印原数组 printSelect(arrf, arrLen); //执行选择排序 selectSort(arrf, arrLen); //打印排序后的数组 printSelect(arrf, arrLen); //暂停终端窗口 system("pause"); return 0; }
原文:https://www.cnblogs.com/cai1432452416/p/11046951.html