选择排序是一种简单直观的排序算法。
工作原理:
每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。
性能:
选择排序是不稳定的排序方法(比如序列[5, 5, 3]第一次就将第一个[5]与[3]交换,导致第一个5挪动到第二个5后面)。
选择排序的时间复杂度是O(n^2)
思想:
n个记录的文件的直接选择排序可经过n-1趟直接选择排序得到有序结果:
①初始状态:无序区为R[1..n],有序区为空。
②第1趟排序
在无序区R[1..n]中选出关键字最小的记录R[k],将它与无序区的第1个记录R[1]交换,使R[1..1]和R[2..n]分别变为记录个数增加1个的新有序区和记录个数减少1个的新无序区。
……
③第i趟排序
第i趟排序开始时,当前有序区和无序区分别为R[1..i-1]和R(i..n)。该趟排序从当前无序区中选出关键字最小的记录 R[k],将它与无序区的第1个记录R交换,使R[1..i]和R分别变为记录个数增加1个的新有序区和记录个数减少1个的新无序区。
C语言版代码:
#include
#include
#define MAX_SIZE 101
#define SWAP(x, y, t) ((t) = (x), (x) = (y), (y) = (t))
void sort(int[], int); /* selection sort */
int main()
{
int i, n;
int list[MAX_SIZE];
printf("Enter the number of numbers to generate: ");
scanf_s("%d", &n);
if (n < 1 || n > MAX_SIZE){
fprintf(stderr, "Improper value of n\n");
exit(1);
}
for (i = 0; i < n; i++){ /* randomly generate numbers */
list[i] = rand() * 1000;
printf("%d ", list[i]);
}
sort(list, n);
printf("\n Sorted array:\n");
for (i = 0; i < n; i++) /* print out sorted numbers */
printf("%d ", list[i]);
printf("\n");
return 0;
}
void sort(int list[], int n)
{
int i, j, min, temp;
for (i = 0; i < n - 1; i++){
min = i;
for (j = i + 1; j < n; j++)
if (list[j] < list[min])
min = j;
SWAP(list[i], list[min], temp);
}
}
#include
#define M 5
void main()
{
int b[M],i,j,t,k;
for(i=0;i scanf("%d",&b[i]); for(i=0;i { for(k=i,j=i+1;j if(b[k]
k=j; if(i!=k) { t=b[i]; b[i]=b[k]; b[k]=t; } } for(i=0;i printf("%d ",b[i]); } 错在大括号位置加错了。 C语言选择排序详解 工作原理是每一次从无序组的数据元素中选出最小(或最大)的一个元素,存放在无序组的起始位置,无序组元素减少,有序组元素增加,直到全部待排序的数据元素排完。 以升序为例的图解: 代码: #include void SelectionSort(int *num,int n) { int i = 0; int min = 0; int j = 0; int tmp = 0; for(i = 0;i < n-1;i++) { min = i;//每次讲min置成无序组起始位置元素下标 for(j = i;j < n;j++)//遍历无序组,找到最小元素。 { if(num[min]>num[j]) { min = j; } } if(min != i)//如果最小元素不是无序组起始位置元素,则与起始元素交换位置 { tmp = num[min]; num[min] = num[i]; num[i] = tmp; } } } (此处空一行) int main() { int num[6] = {5,4,3,2,9,1}; int i = 0; SelectionSort(num,6);//这里需要将数列元素个数传入。有心者可用sizeof在函数内求得元素个数。 for(i = 0;i < 6;i++) { printf("%d ",num[i]); } return 0; }扩展资料:
#include
void main()
{
char c[10]={'a','A','b','e','Z','F','K','t','z','n'};
int i,j,t;
for (i=0;i<9;i++)
for(j=i+1;j<10;j++)
if(c[i]>c[j])
{
t=c[i];
c[i]=c[j];
c[j]=t;
}
for(i=0;i<10;i++)
printf("%c ",c[i]);
}
C语言经典例子之选择法排序
好的,一会帮你写