选择排序
选择排序的基本思想:每一趟在n-i+1(i=1,2,3,…,n-1)个记录中选取关键字最小的记录作为有序序列中第i个记录。例如:
48 62 35 77 55 14 35 98
14 {62 35 77 55 48 35 98}
14 35 {62 77 55 48 35 98}
14 35 35 {77 55 48 62 98}
14 35 35 48 {55 77 62 98}
14 35 35 48 55 {77 62 98}
14 35 35 48 55 62 {77 98}
14 35 35 48 55 62 77 98
算法描述:
#ifndef Sort_h__
#define Sort_h__
#include <stdio.h>
#include <stdlib.h>
//选择排序
void SelectSort(int *arr, int length);
#endif // Sort_h__
以上函数实现
#include "Sort.h"
//输出
void Show(int *arr, int length)
{
for (int i = 0; i < length; i++)
{
printf("%d,", arr[i]);
}
printf("\b \n");
}
//交换
void Swap(int *num1, int *num2)
{
int temp = *num1;
*num1 = *num2;
*num2 = temp;
}
//选择排序
void SelectSort(int *arr, int length)
{
for (int i = 0; i < length-1; i++)
{
int min = i;
for (int j = i+1; j < length; j++)
{
if (arr[j] < arr[min])
{
min = j;
}
}
if (i != min)
{
Swap(&arr[i], &arr[min]);
}
}
}
测试:
#include "Sort.h"
int main(void)
{
int arr[] = {9,8,7,6,5,4,3,2,34,56,74,90,5};
int length = sizeof(arr)/sizeof(arr[0]);
printf("----------选择排序---------\n");
SelectSort(arr, length);
Show(arr, length);
return 0;
}