C语言:用选择排序法对一个数组里的数进行排序,从小到大,要求选出小的进行排序
//选择排序算法,按从小到大顺序void select_sort(int *arr,int n){ int i,j,k; int tmp; for(i=0;i arr[j]) //如果发现比当前最小元素还小的元素,则更新记录最小元素的下标k k=j; }//如果最小元素的下标不是后面n-i+1的未排序序列的第一个元素,则需要交换第i个元素和后面找到的最小元素的位置 if(k != i) { tmp=arr[k]; arr[k]=arr[i]; arr[i]=tmp; } }}
#include
#define SIZE_N 20 //SIZE_N is the size of the array
void sortFun(int a[], int n)
{
int temp;
for(int i=0;i<n;i++) //进行n个循环,每次选出剩下的最小的数,如第一次选出n个数中最
for(int j=i+1;j<n;j++)//小的那个,如a[8],放入a[0],而将a[0]原来的值放入a[8].第二次
if(a[j]<a[i]) //就从a[1]到a[n-1]中找出最小的数放入a[1],以此类推。
{
temp=a[j];
a[j]=a[i];
a[i]=temp;
}
}
void main()
{
int a[SIZE_N];
for(int i=0;i<SIZE_N;i++)
{
scanf("%d",&a[i]); //输入数据
}
sortFun(a,SIZE_N); //调用排序函数
for(int j=0;j<SIZE_N;j++)
{
printf("%d
",a[j]); //输出数据
}
}
以上就是基本的程序,局部可以优化使其更人性化。读入数据和输出数据的方式可以考虑用文件的方式,但排序的函数才是关键。以上程序调试通过,希望可以帮到你。
这样:
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("
");
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("
");
sorted(a,n);printf("排序后的数组:");
for(i=0;i<n;i++)printf("%d ",a[i]);printf("
");
return 0;
}
C语言编程 题目描述 使用选择排序法对数组元素进行排序,要求输出每一 ...
include<stdio.h> int main(){int n,i,j,k,t,a[20];scanf("%d",&n);for(i=0;i<n;i++)scanf("%d",&a[i]);for(i=0;i<n-1;i++){k=i;for(j=i+1;j<n;j++)if(a[j]<a[k])k=j;t=a[i];a[i]=a[k];a[k]=t;for(j=0;j<n;j++)printf("%d ",a[j])...
C语言中冒泡排序法和选择排序法有哪些不同
小的数便出现在了数组的最后面,然后进行第二趟的比较时则要对余下的前9个数进行比较,9趟比较完成后则数组也已经排好序。2、选择排序法:10个数则是需要排9次,若按降序排列,第一次比较:则是将数组的第一个元素与数组中从第二个元素开始到最后的元素进行比较找到最大的数记录下来然后将值赋值...
C语言编程用选择排序法对五个数由大到小排序
假定5个数在数组a[]中 int a[]={3,5,2,1,4};int i,j,temp;for (i=0; i<4; i++){ for (j=i+1; j<5; j++){ if (a[i]<a[j]){ temp=a[i];a[i]=a[j];a[j]=temp;} } } for (i=0; i<5; i++){ printf("%4d",a[i]);} 运行后输出 5 4 3 2 1 ...
C语言中冒泡排序法和选择排序法有哪些不同
然后进行第二趟的比较时则要对余下的前9个数进行比较,9趟比较完成后则数组也已经排好序。选择排序法:10个数则是需要排9次,若按降序排列,第一次比较:则是将数组的第一个元素与数组中从第二个元素开始到最后的元素进行比较找到最大的数记录下来然后将值赋值给数组的第一个元素,然后进行第二次...
1.编写一个程序用选择排序法对数组 a[] = {20,10,50,30,70,59,65,80...
static void BubbleSort(int a []){ int temp=0;for (int i = 0; i < a.length ; i++) { for (int j = 0; j < a.length - i - 1; j++){ if (a[j]>a[j + 1]){ \/\/把这里改成大于,就是升序了 temp=a[j];a[j]=a[j + 1];a[j + 1]=temp;} } } } ...
用选择法将一组数字升序排序,谁懂C语言,谢谢
选择排序的原理为:一次选定数组中的每一个数,记下当前位置并假设它是从当前位置开始后面数中的最小数min=i,从这个数的下一个数开始扫描 直到最后一个数,并记录下最小数的位置min,扫描结束后如果min不等于i,说明假设错误,则交换min与i位置上的数。代码如下:void selectionSort(double *p, int...
C语言,用选择法对数组中10个整数按由小到大排序?求解释!!!
选择排序的思想是:每一趟的排序过程都是在当前位置后面剩下的待排序对象中选出值最小的那个,然后放到当前位置上。该程序中k的定义主要是为了存放数组中最小数的位置。然后通过t=array[k];array[k]=array[i];array[i]=t;这三条语句,再把这数组中最小的数字放到前面。注意C语言当中的“=”不...
求c语言选择排序法和 冒泡排序法代码!
选择法的算法: 假设需要对10个数进行排序,那么首先找出10个数里面的最小数,并和这个10个数的第一个(下标0)交换位置,剩下9个数(这9个数都比刚才选出来那个数大),再选出这9个数中的最小的数,和第二个位置的数(下标1)交换,于是还剩8个数(这8个数都比刚才选出来的大).. 依...
用选择法对10个整数从小到大排序
选择排序法 是对 定位比较交换法(冒泡排序法) 的一种改进。 选择排序的基本思想是:每一趟在n-i+1(i=1,2,…n-1)个记录中选取关键字最小的记录作为有序序列中第i个记录。基于此思想的算法主要有简单选择排序、树型选择排序和堆排序。 简单选择排序的基本思想:第1趟,在待排序记录中选出最小的记录,将它与...
编写程序,使用选择排序法对已知列表(2.,34.,7,-1,-100,15,891进行升 ...
第一个:6+5+4+3+2+1 第二个:那就从后往前排,大的往后换 : for i in range(len(a)-1,0,-1):...: for j in range(i-1,-1,-1):...: if a[i]
郜仇四物: #include<stdio.h> void px(int a[]) {int i,temp,j;for(i=0;i<10;i++){for(j=i;j<10;j++){if(a[i]<=a[j]){temp=a[i];a[i]=a[j];a[j]=temp;}}} }void main(){int i,a[10];for(i=0;i<10;i++){printf("成绩:");scanf("%d",&a[i]);}px(a);for(i=0;i<10;i++...
洪湖市18764186291: C语言,用选择法对数组中10个整数按由小到大排序?求解释!!! - ?
郜仇四物: 首先以array[0]作为参照,从左到右扫描,找到最小的数据与array[0]位置交换. 接下来以array[1]作为参照,重复上述过程. ... k=i定位参照 k=j找到剩下数组中最小值
洪湖市18764186291: C语言,选择法排序,对数组A进行升序排列,求答案,谢大神! - ?
郜仇四物: 给你个我以前写的降序的程序,你稍微改下就行了,我懒得改了,#include <stdio.h> #define N 10 main() {int i,j;/*i,j为循环变量*/long a[N],temp,min; /*a[min]为比较时较小的数*/printf("请依次输入%d个数.\n",N);/*进行循环输入这十个...
洪湖市18764186291: 一个C语言问题:用选择法对数组中十个数由小到大排序 - ?
郜仇四物: 必须要k吧.注意到k有两个地方被赋值,k=i和if(array[j]<array[k]) k=j,且if语句是放在for(j=i+1;j<n;j++)之后,说明k是用来存放10个数中最小数的位置,通过下面3句赋值语句把它放在最前,其他的以此类推.选择法效率比较低,使用冒泡法应该更容易理解一些,且效率更高.
洪湖市18764186291: 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);//输出的内容就是排序好了的 }//下面方法是用来排序的 ...
洪湖市18764186291: c语言中选择法对数组内元素进行排序的程序是什么?举个例子具体解释一下……?
郜仇四物: # include<iostream> viod main() { int i,j,min,temp,a[11]; printf("input data:\n") for(i=0;i<=10;i++) {printf("a[%d]=",i); scanf("d%",&a[i]); } printf("\n"); printf("The orginal numbers:\n"); for(i=0;i<=10;i++) printf("%5d",n[i]); printf("\n"); for(i...
洪湖市18764186291: C语言采用选择法对数组元素按从大到小的顺序排列 - ?
郜仇四物: #include<stdio.h>#define SIZE 10 main() { int a[SIZE]={3,8,7,6,5,0, 1,2,9,4}; int max,pos; int i,j; printf("数组中原存放数据是:\n"); for(i=0;i<SIZE;i++) printf("%3d",a[i]); for(i=0;i<SIZE-1;i++){ max=a[i];pos=i; for(j=i+1;j<SIZE;j++)if(a[j]>max) {...
洪湖市18764186291: C语言编程,用选择法对数组中20个实数进行排序 - ?
郜仇四物: #include<stdio.h> int main() {int a[20],i,j,k,t; for(i=0;i<20;i++) //读入20个数据 scanf("%d",&a[i]); for(i=0;i<19;i++) //选择排序 {k=i; //k:当前最小元素的下标 for(j=i+1;j<20;j++) //与后面所有元素逐一比较 if(a[j]>a[k])k=j; //如后面有元素更小,就...
洪湖市18764186291: C语言|以下函数fun的功能是用选择排序法对数组的数据按从小到大的顺序排列 - ?
郜仇四物: 答案和楼上一样 void fun(int a[ ],int n) { int i,j,k,temp; for(i=0;i{ k=i; //k的作用是记录要交换的位置 for(j=i+1;j if(a[j]if( k != i ) //如果k不等于i,说明a[i]不是数组第i位到第n位中最小的元素,交换后让其成为最小的 { temp=a[k]; a[k]=a[i]; a[i]=temp; } } }
洪湖市18764186291: 求解C语言程序设计题:编写函数用选择排序法对数组中的数据进行从小到 大的排序. - ?
郜仇四物: void sort(int a[], int n) { int i, j, t; for(i = 0; i < n - 1; i++) for(j = i + 1; j < n; j++) if(a[i] > a[j]) { t = a[i]; a[i] = a[j]; a[j] = t; } }