您的位置:

c语言排列选择,选择排序 C语言

本文目录一览:

C语言编程:选择法排序

选择排序是一种简单直观的排序算法。

工作原理:

  每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。

性能:

  选择排序是不稳定的排序方法(比如序列[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 stdio.h

#include math.h

 

#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);

    }

}

C语言选择排序法

这是选择排序。先用a[0]与a[1]比较,当a[0]a[1]时并不交换,而用k记下来现在a[0]最小……这样一趟比较完后a[k]就是整个数组中最小的元素,把它与a[0]交换;第二趟,从a[1]开始重复前面的操作,那么最后a[1]就是剩下的n-1个元素中最小的……看a[0]、a[1]已经由小到大排好了,当做完n-1趟时不就把整个数组都排好了吗?注意:t=array[k];array[k]=array[i];array[i]=t;不是for(j=i+1;jn;j++)的循环体,要等它循环完了后才执行一次。

c语言选择排序法?

#includestdio.h

int main()

{ int a[6],max,min,i,j,ma,mi,t,mid;

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

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

}

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

{ min=a[i];

  max=a[i];

  for(j=i,mi=i,ma=i; j6-i; j++)

  { if(a[j]min)

    { min=a[j];

      mi=j;

    }

    if(a[j]max)

    { max=a[j];

      ma=j;

    }

  }

  t=a[i];

  a[i]=a[mi];

  a[mi]=t;

  if(ma==i)ma=mi; //增加了这一行

  mid=a[5-i];

  a[5-i]=a[ma];

  a[ma]=mid;

}

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

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

  printf(" ");

}

return 0;

}