您的位置:

c语言中selectsort,C语言中的简单数据类型包括

本文目录一览:

C语言直接选择排序运行失败

你的选择排序的函数传参,传错了,select_sort(a[8],8);应该是select_sort(a,8);

a[8]在C语言中是数组a的第9个元素,而a数组只有8个元素,所以你传了一个越界的数组元素,因此出运行错误

a在C语言中是数组a的第1个元素的指针,所以可以在函数中访问到整个a数组

还有函数的定义那一句void select_sort();应该改成 void select_sort(int a[],int n);

还有需要把if(min!=i)语句移到for-j循环外面,for-i循环里面

还有把printf("%d",a[i]); 改成printf("%d ",a[i]);每输出一个元素加一个空格

完整的C语言程序如下

#include stdio.h

void select_sort(int a[],int n);

int main(){ 

 int i; int a[8]; 

 printf("请输入8个整数,将为您从小到大排序。\n"); 

 for(i=0;i8;i++) { 

  scanf("%d",a[i]); 

 } 

 select_sort(a,8); 

 for(i=0;i8;i++) { 

  printf("%d ",a[i]); 

 } 

 return 0;

}

void select_sort(int a[],int n){ 

 int i,j,t,min; 

 for(i=0;in-1;i++) { //n-1次排序(移动)

  min=i; 

  for(j=i+1;jn;j++) { //n-i次比较

   if(a[min]a[j]) min=j; 

  } 

  if(min!=i){ //最小值不在i处的情况 

   t=a[min]; 

   a[min]=a[i]; 

   a[i]=t; 

  } 

 }

}

运行结果

请输入8个整数,将为您从小到大排序。

8 71 16 35 43 33 26 18

8 16 18 26 33 35 43 71

C语言编写程序,将一个一维数组的值按逆序重新存放。

#includestdio.h

int  main()

{

  int a[5]={8,6,5,4,1},i,n=5,temp;

  for(i=0;in/2;i++)

  {

      temp=a[i];

      a[i]=a[n-i-1];

      a[n-i-1]=temp;       

  }                 

 for(i=0;in;i++)

 {

    printf("%d\t",a[i]);     

 }               

  system("pause");

  return 0;

}

扩展资料:

选择排序

主要思想就是,基本上默认数组中第一个元素为最大(最小)值,之后将这个元素和后面的每个元素都进行比较,以由大到小排序为例,当第一个值遇到比其大的,就进行交换。这样第一轮过后,第一位就是最大的。

接着进行第二轮,由第二个数开始逐个比较,遇到比第二个数大的进行交换,这样第二轮之后第二个数就是第二大的了,以此类推,不断进行选择,最后完成排序。

void selectSort(int numbers[], int length) {

for (int i = 0; i length; i++) {

  for (int j = i + 1; j length; j++) {

    if (numbers[i] numbers[j]) {

      int temp = numbers[i];

      numbers[i] = numbers[j];

      numbers[j] = temp;

    }

  }

}

}

int main(int argc, const char * argv[]) {

int myArray[] = {42, 7, 1, -3, 88};

int length = sizeof(myArray) / sizeof(myArray[0]);

selectSort(myArray, length);

for (int i = 0; i length; i++) {

  printf("%i ", myArray[i]);

}

return 0;

}

当第一个数来比较的时候,i = 0,那么j应该等于i + 1,因为第一个数要和第二个数开始比,并且比较length - 1次;当i = 1时,j = 2,并且比较length - 2次,以此类推;上面写的是由大到小排序。

c语言怎样通过函数调用实现选择排序法

c语言通过函数调用实现选择排序法:

1、写一个简单选择排序法的函数名,包含参数。int SelectSort(int * ListData,int ListLength);

2、写两个循环,在循环中应用简单选择插入排序:

int SelectSort(int * ListData,int ListLength)

{

int i , j ;

int length = ListLength;

for(i=0;i=length-2;i++)

{

int k = i;

for(j=i+1;j=length-1;j++)

{

if(ListData[k]ListData[j])

{

k=j;

}

}

if(k!=i)

{

int tmp = ListData[i];

ListData[i] = ListData[k];

ListData[k] = tmp;

}

}

return 0;

}

3、对编好的程序进行测试,得出测试结果:

int main()

{

int TestData[5] = {34,15,6,89,67};

int i = 0;

printf("排序之前的结果\n");

for(i = 0;i5;i++)

printf("|%d|",TestData[i]);

int retData = SelectSort(TestData,5);

printf("排序之后的结果:\n");

for(i = 0;i5;i++)

printf("|%d|",TestData[i]);

return 0;

}

4、简单选择排序中,需要移动的记录次数比较少,主要的时间消耗在对于数据的比较次数。基本上,在比较的时候,消耗的时间复杂度为:n*n。

C语言中通过函数调用对一维数组进行排序

#include stdio.h

#include stdlib.h

#include time.h

#define MAXlen 100

void select_sort(int *x, int n) { //选择排序

int i, j, min;

int t;

for (i = 0; i n - 1; i++) { // 要选择的次数:0~n-2共n-1次

min = i; // 假设当前下标为i的数最小,比较后再调整

for (j = i + 1; j n; j++) { //循环找出最小的数的下标是哪个

if (*(x + j) *(x + min)) {

min = j; // 如果后面的数比前面的小,则记下它的下标

}

}

if (min != i) { // 如果min在循环中改变了,就需要交换数据

t = *(x + i);

*(x + i) = *(x + min);

*(x + min) = t;

}

}

}

int main() {

int i;

int iArr[MAXlen];

srand((unsigned int)time(NULL));

printf("\n排序前:\n");

for(i = 0 ; i MAXlen ; i++) {

iArr[i] = (unsigned int)rand() % 1000;

if(i % 10 == 0) printf("%\n");

printf("%5d",iArr[i]);

}

printf("\n");

select_sort(iArr,MAXlen);

printf("\n排序后:\n");

for(i = 0 ; i MAXlen ; i++) {

if(i % 10 == 0) printf("%\n");

printf("%5d",iArr[i]);

}

printf("\n\n");

return 0;

}