C语言选择法排序

Python014

C语言选择法排序,第1张

#include<stdio.h>

#define M 5

void main()

{

int b[M],i,j,t,k

for(i=0i<Mi++)

scanf("%d",&b[i])

for(i=0i<M-1i++)

{

for(k=i,j=i+1j<Mj++)

if(b[k]<b[j])

k=j

if(i!=k)

{

t=b[i]

b[i]=b[k]

b[k]=t

}

}

for(i=0i<Mi++)

printf("%d ",b[i])

}

错在大括号位置加错了。

扩展资料:

C语言选择排序详解

工作原理是每一次从无序组的数据元素中选出最小(或最大)的一个元素,存放在无序组的起始位置,无序组元素减少,有序组元素增加,直到全部待排序的数据元素排完。

以升序为例的图解:

代码:

#include<stdio.h>

void SelectionSort(int *num,int n)

{

int i = 0

int min = 0

int j = 0

int tmp = 0

for(i = 0i <n-1i++)

{

min = i//每次讲min置成无序组起始位置元素下标

for(j = ij <nj++)//遍历无序组,找到最小元素。

{

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 = 0i <6i++)

{

printf("%d ",num[i])

}

return 0

}

选择排序:

void select_sort(int a[],int n)        //传入数组的要排序的元素个数

{int i,j,min,t

for(i=0i<n-1i++)

{  min=i     //min:当前最小值下标

for(j=i+1j<nj++)        //扫描余下的部分

if(a[min]>a[j])        //若有其它元素更小,就记录其下标

min=j

if(min!=i)        //保若最小值不在排序区首位,就换到首位

{t=a[min]a[min]=a[i]a[i]=t}

}

}

冒泡排序:

void bubble_sort(int a[], int n)        //传入数组的要排序的元素个数

{ int i, j, t

for (j=0j<n-1j++)        //n个元素比较n-1轮

for (i= 0i<n-1-ji++)   //比较相信的两个数

if(a[i]>a[i+1])          //若大小顺序不符,就交换

{t=a[i] a[i]=a[i+1]a[i+1]=t

}

最大值吧!

/*选择法 进行n-1次循环,每次循环下来选择一个最大或最小数*/

#include<stdio.h>

void sort(int a[],int n)

{

int i,j,temp,maxi/maxi中放最大的数组下标

for(i=0i<n-1i++) /*选择从第一个数开始*/

{

maxi=i/*假设第i个下标最大*/

for(j=i+1j<nj++)

if(a[j]>a[maxi]) maxi=j/*maxi中始终放最大值*/

if(maxi!=i)

{

temp=a[i]

a[i]=a[maxi]

a[maxi]=temp

}

}

}

main()

{

int *p,i,a[5]

p=a

for(i=0i<5i++)

scanf("%d",p+i)

sort(p,5)

for(p<a+5p++)

printf("%2d",*p)

}