C语言 简单选择排序算法

时间:2022-12-20 22:06:34

首先介绍一下什么是选择排序

选择排序法 是对 定位比较交换法(也就是冒泡排序法) 的一种改进。选择排序的基本思想是:每一趟在n-i+1(i=1,2,…n-1)个记录中选取关键 字最小的记录作为有序序列中第i个记录。基于此思想的算法主要有简单选择排序、树型选择排序和堆排序

简单选择排序的基本思想:第1趟,在待排序记录r[1]~r[n]中选出最小的记录,将它与r[1]交换;第2趟,在待排序记录r[2]~r[n]中选出最小的记录,将它

与r[2]交换;以此类推,第i趟在待排序记录r[i]~r[n]中选出最小的记录,将它与r[i]交换,使有序序列不断增长直到全部排序完毕。

以下是我将我的冒泡排序修改了一下:
#include <stdio.h>


void swap(int *a,int *b)
{
int c;
c = *a;
*a = *b;
*b = c;
}


int main()
{
int str[]={2, 5, 6, 11, 4, 7, 8, 55, 0, 3};
int i;
int j;
int len;·

len =sizeof(str)/sizeof(str[0]);

int str1[len];

for(i=0; i<len; i++)
{
printf("%3d",str[i]);
}
printf("\n");

for(i=0; i<len; i++)
{
for(j=0;j<len-i-1;j++)
{
if(str[j] > str[j+1])
{
swap(&str[j],&str[j+1]);
}
}

str1[i] = str[j];
}
for(i=0; i<len; i++)
{
printf("%3d",str[i]);
}
printf("\n");

for(i=0; i<len; i++)
{
printf("%3d",str1[i]);
}
printf("\n");
return 0;
}
运行结果如下:
[lalala@jjjjj ~]$ ./paixv             
  2  5  6 11  4  7  8 55  0  3  0  2  3  4  5  6  7  8 11 55 55 11  8  7  6  5  4  3  2  0
我是将选择出来的最大的元素放进了一个新的数组里;创建了一个新的递减的序列;