工作原理:每次寻找出数组最大/小值放到序列起始位置(始/末)
C语言实现:
1.简单版
#include <stdio.h>
//定义常量数组长度
#define MAX_SIZE 5
#define SWAP(x, y, t) ((t) = (x), (x) = (y), (y) = (t))
//算法时间复杂度O=n^2
int main(int argc, const char * argv[])
{
int n,temp;
int arr[MAX_SIZE]={5,4,1,3,2};
//如果次数大于数组长度,则结束递归
for (n=0; n<MAX_SIZE-1; n++) {
int min=n;
for (int index = n+1; index<MAX_SIZE; ++index) {
if (arr[min]>arr[index]) {
min=index;
}
}
//交换数值
SWAP(arr[min], arr[n],temp);
}
for (int i=0; i<MAX_SIZE; ++i) {
printf("a[%d]:%d ",i,arr[i]);
}
return 0;
}
2.模块化
#include <stdio.h>
//定义常量数组长度
#define MAX_SIZE 5
//&符号在函数形式参数上代表实际参数的值会随函数操作改变而改变
void sort(int[],int &);
void print_list(int[]);
void swap(int &,int &);
//算法时间复杂度O=n^2
int main(int argc, const char * argv[])
{
//次数
int n = 0;
//定义数组
int arr[MAX_SIZE]={5,4,1,3,2};
sort(arr,n);
print_list(arr);
return 0;
}
/**
* Sort 比较排序,从小到大
* @param array list[] 需要排序的数组
* @param int n 执行排序的次数
*/
void sort(int list[],int &n)
{
int min=n;
//如果次数大于数组长度,则结束递归
if (n>=MAX_SIZE-1) {
return;
}
int index;
for (index = n+1; index<MAX_SIZE; ++index) {
if (list[min]>list[index]) {
min=index;
}
}
//交换数值
swap(list[min], list[n]);
//递归操作
sort(list, ++n);
}
/**
* Print_list 遍历数组
* @param array list[] 需要遍历的数组
*/
void print_list(int list[])
{
for (int i=0;i<MAX_SIZE;++i) {
printf("a[%d]:%d ",i,list[i]);
}
}
void swap(int &a,int &b)
{
int temp;
temp=a;
a=b;
b=temp;
}