这样:
int *a = (int *)malloc(sizeof(int) * n)//动态分配数组空间 ,有几个元素,n就是几。
for(i=0i<ni++)
{
a[i]=录入数值
}
Sort(a, n)
for(j=0j<nj++)
{
printf("%d",a[ij)//输出的内容就是排序好了的晌粗
}
//下面方肢谨迅法是用来排序历此的
void Sort(int *a, int n)
{
int i, j, temp
for(i=0i<ni++)
{
for(j=ij<nj++)
{
if(a[i] >a[j])
{
temp = a[i]
a[i] = a[j]
a[j] = temp
}
}
}
扩展资料:注意事项
1、选择排序法是将序列分为两段,有序前列和无序后列,每次查找无序后列中最大元素,将其插入到有序前列的最末尾处,直至无序后列最后一个元素,最终排序后的序列为降序序列。
2、适用于包括数组和向量在内的序列。
3、选择排序与冒泡排序的区别是选择排序每次遍历时会记住最大元素的位置,只进行一次交换,而冒泡排序每次遍历时会交换两个顺序不合法的元素。
算法程序:
#include "stdafx.h"
#include<iostream>
using namespace std
void SelectSort(int A[],int n)
{
for(int i = 0i <ni++ )
{
int max =i
for(int j = i+1j <nj++) //查找最大元素所在位置
{
if (A[j] >A[max])
max =j
}
int temp = A[max] //交换无序后列中首元素与最大元素的位置
A[max] = A[i]
A[i] = temp
}
}
#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
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)