全部学习汇总: GreyZhang/c_basic: little bits of c. (github.com)
选择排序的实现思想跟冒泡排序的思想非常相近,二者的差一点在于:冒泡排序在比较交换的过程中交换的是两个位置的数据,而选择排序则是在遍历比较的过程中寻找最小数值的index值。如果在遍历比较的过程中,发现最小值的Index值跟第一轮循环的Index值不同,进行数据的交换。在选择排序的内循环中,其实并没有发生数据的交换,而是作为临时变量的index值得变化。
选择排序的具体实现核心代码如下:
#include "select_sort.h"
void SelectSort(int *array,int array_size)
{
int i = 0;
int j = 0;
int index_min = 0;
for(i = 0; i < array_size; i++)
{
index_min = i;
for(j = i + 1; j < array_size; j++)
{
if(array[j] < array[index_min])
{
index_min = j;
}
}
if(index_min != i)
{
array[i] = array[i] ^ array[index_min];
array[index_min] = array[i] ^ array[index_min];
array[i] = array[i] ^ array[index_min];
}
}
}
主函数以及测试数据设计如下:
#include "stdio.h"
#include "select_sort.h"
#define MY_CARD(array) (sizeof((array)) / sizeof(*(array)))
void ArrayPrint(int *array,size_t array_size);
int test_array[12] = {1,3,5,7,2,5,9,5,21,55,1,0};
int main(void)
{
printf("before sorted:\n");
ArrayPrint(test_array,MY_CARD(test_array));
SelectSort(test_array,MY_CARD(test_array));
printf("\nafter sorted:\n");
ArrayPrint(test_array,MY_CARD(test_array));
return 0;
}
void ArrayPrint(int *array,size_t array_size)
{
int i = 0;
for(i = 0; i < array_size; i++)
{
printf("%d,",array[i]);
}
}
编译以及运行结果如下:
程序的运行结果正常。