C语言:用选择排序法对一个数组里的数进行排序,从小到大,要求选出小的进行排序
这样:
int *a = (int *)malloc(sizeof(int) * n); //动态分配数组空间 ,有几个元素,n就是几。
for(i=0; i<n; i++)
{
a[i]=录入数值;
}
Sort(a, n);
for(j=0; j<n; j++)
{
printf("%d",a[ij);//输出的内容就是排序好了的
}
//下面方法是用来排序的
void Sort(int *a, int n)
{
int i, j, temp;
for(i=0; i<n; i++)
{
for(j=i; j<n; j++)
{
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 = 0;i < n;i++ )
{
int max =i;
for(int j = i+1;j < n;j++) //查找最大元素所在位置
{
if (A[j] > A[max])
max =j;
}
int temp = A[max]; //交换无序后列中首元素与最大元素的位置
A[max] = A[i];
A[i] = temp;
}
}
#include<stdio.h>
intmain()
{
inti=0;
inta[10]={0,5,2,3,6,9,8,7,4,1};
intj=0;
inttmp=0;
intm=sizeof(a)/sizeof(a[0]);//s数组大小
for(i=0;i<m-1;i++)//比较m-1次
{
for(j=0;j<m-i-1;j++)//最后一次比较a[m-i-1]与a[m-i-2]
{
if(a[j]>a[j+1])//如果a[j]比a[j+1]大则交换内容
{
tmp=a[j+1];
a[j+1]=a[j];
a[j]=tmp;
}
}
}
for(i=0;i<m;i++)
{
printf("%d",a[i]);//打印
}
printf("\n");
return0;
}
扩展资料
C语言排序法
把一个数组进行排序可以使用选择排序法。选择排序法的原理在是每一趟循环寻找数组中最小的数的下标,然后按照递增的顺序放入数组中。
循环找出最小数的下标,该下标用min保存,直到比较完整个数组,即可找到最小的数,然后将该数放入数组的第一位,这样就排好了一个元素。
需要再嵌套一层外层循环即可排好所有元素。第二次循环就不用再比较第一个元素了,因为第一个元素已经排好,依次类推,每一次循环就会排好一个,进行n-1次循环即可排好所有元素。
#include<stdio.h>
void sorted(int a[],int n){ //选择法排序
int i,j,k,t;
for(i=0;i<n-1;i++){
k=i;
for(j=i+1;j<n;j++){
if(a[k]>a[j])k=j;}
if(k!=i){t=a[k];a[k]=a[i];a[i]=t;}}
}
int main(){
int n,i,a[255];
printf("请输入数据总量n(1-254):");scanf("%d",&n);
printf("请输入%d个数:",n);
for(i=0;i<n;i++)scanf("%d",&a[i]);
printf("排序前的数组:");
for(i=0;i<n;i++)printf("%d ",a[i]);printf("\n");
sorted(a,n);printf("排序后的数组:");
for(i=0;i<n;i++)printf("%d ",a[i]);printf("\n");
return 0;
}