简单的选择排序工程
选择排序的思路比较简单:从大到小排,将第一个数后面的数依次与其相比较,如果比它大就交换数值
选择排序的特点是每次循环比较的时候只进行依次交换,最多进行n-1的数据交换就可以实现正序
main.c
#include "selection sort.h"
#include <stdio.h>
int main()
{
int num;
int i;
int *p;
int arr[1024]; //开个数组,存储要进行排序的数
p = arr;
printf("请输入数的个数:");
scanf("%d",&num);
printf("请输入数:\n");
for (i = 0; i < num; i++)
{
scanf("%d",&arr[i]);
}
SelectionSort(p,num);
return 0;
}
selection sort.c
#include <stdio.h>
void SelectionSort(int *p, int n)
{
int i;
int j;
int k; //用来记录当前最大值的下标
int tmp;
for (i = 0; i < n; i++)
{
k = i; //首次将最大值设为第一个数,因为此时还未进行比较
for (j = i+1; j < n; j++) //找到每次循环最大值的位置并记录下来
{
if (*(p+j) > *(p+k)) //当前最大值与后面值相比,
{
k = j;
}
}
if (k != i) //最大值发生了变化,进行交换
{
tmp = *(p+i);
*(p+i) = *(p+k);
*(p+k) = tmp;
}
}
for (i = 0; i < n; i++)
{
printf("%d\n",*(p+i));
}
}
selection sort.h
#ifndef SELECTION_SORT
#define SELECTION_SORT
void SelectionSort(int *p, int n);
#endif