选择排序
基本思想
首先,在待排序序列中选择出最小的记录,然后将这个最小的数据元素与第一个记录交换,第一个记录到位,这是第一趟排序;第二趟。就是从第二个记录到最后一个记录中选择最小的记录,之后将最小的记录与第二个记录交换,第二个记录到位;以此类推,进行n-1趟,就可以得到一个有序序列。
空间复杂度:O(1)
时间复杂度:O(n^2)
稳定性:稳定
代码实现
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100
void Input(); //输入数组
void Output(); //输出数组
void SelectionSort(); //选择排序
int arr[MAXSIZE];
int count = 0;
//选择排序
void SelectionSort(){
int temp;
for (int i = 0; i < count; i++)
{
int min = i; //记录最小值的下标
//每轮找出最小的数字
for (int j = i; j < count; j++)
{
if (arr[min] > arr[j])
min = j;
}
//将最小的数字交换到位
temp = arr[i];
arr[i] = arr[min];
arr[min] = temp;
}
}
//输入函数
void Input(){
int x,i;
char s;
printf("please input less than 100 numbers, end with enter:\n");
for (i = 0; s != '\n'; i++)
{
scanf("%d",&arr[i]);
s = getchar();
count++;
}
}
//输出函数
void Output(){
printf("sorted numbers:\n");
for (int i = 0; i < count; i++){
printf("%d\t",arr[i]);
}
printf("\n");
}
int main(){
Input();
SelectionSort();
Output();
system("pause");
return 0;
}
运行结果: