c语言一维数组排序
㈠ 一维数组的排序,用c语言写。QAQ求帮忙
#include "stdio.h"
#include "conio.h"
void sort(int score[],int n)
{
int i,j,d;
for(i=0;i<n-1;i++){
for(j=i+1;j<n;j++)
if (score[i]<score[j]){
d=score[i];
score[i]=score[j];
score[j]=d;
}
}
}
void main()
{
int score[20];
int i,n;
printf("Input n=?\n");
scanf("%d",&n);
printf("Pleas input %d scores\n",n);
for(i=0;i<n;i++)
scanf("%d",&score[i]);
sort(score,n);
printf("The sort data is:\n");
for(i=0;i<n;i++)
printf("%3d",score[i]);
getch();
}
㈡ C语言中通过函数调用对一维数组进行排序
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAXlen 100
void select_sort(int *x, int n) { //选择排序
int i, j, min;
int t;
for (i = 0; i < n - 1; i++) { // 要选择的次数:0~n-2共n-1次
min = i; // 假设当前下标为的数最小,比较后再调整
for (j = i + 1; j < n; j++) { //循环找出最小的数的下标是哪个
if (*(x + j) < *(x + min)) {
min = j; // 如果后面的数比前面的小,则记下它的下标
}
}
if (min != i) { // 如果min在循环中改变了,就需要交换数据
t = *(x + i);
*(x + i) = *(x + min);
*(x + min) = t;
}
}
}
int main() {
int i;
int iArr[MAXlen];
srand((unsigned int)time(NULL));
printf("\n排序前:\n");
for(i = 0 ; i < MAXlen ; i++) {
iArr[i] = (unsigned int)rand() % 1000;
if(i % 10 == 0) printf("%\n");
printf("%5d",iArr[i]);
}
printf("\n");
select_sort(iArr,MAXlen);
printf("\n排序后:\n");
for(i = 0 ; i < MAXlen ; i++) {
if(i % 10 == 0) printf("%\n");
printf("%5d",iArr[i]);
}
printf("\n\n");
return 0;
}
㈢ c语言中,用一维数组排序十个整数,怎么做
需要准备的材料分别有:电脑、C语言编译器。
1、首先,打开C语言编译器,新建一个初始.cpp文件,例如:test.cpp。
㈣ 用C语言对一维数组排序,并输出原来的位置
可以先用冒泡排序对数组进行排序,然后对排序的数组进行遍历,找出其在排序之前数组中的位置,参考代码如下:
#include<stdio.h>
#include<string.h>
#defineN5
intmain()
{
inta[N],b[N],c[N],i,j,temp;
for(i=0;i<N;i++){//输入数组,并用b保存数组a的值
scanf("%d",&a[i]);
b[i]=a[i];
}
for(i=0;i<N-1;i++)//对a从大到小冒泡排序
for(j=0;j<N-i-1;j++)
if(a[j]<a[j+1]){
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
for(i=0;i<N;i++)//输出排序后的a
printf("%d",a[i]);
printf(" ");
for(i=0;i<N;i++)//遍历找出以前的位置
for(j=0;j<N;j++){
if(a[i]==b[j])
c[i]=j;
}
for(i=0;i<N;i++)//输出位置数组
printf("%d",c[i]+1);
printf(" ");
return0;
}
/*
运行结果:
38476
87643
24531
*/
㈤ 用C语言对一维数组排序,并输出已排好元素的原来位置
/*我举个简单例子,一个一维数组inta[5]={3,8,4,7,6}
按降序排列以后是intb[5]={8,7,6,4,3}
最大的元素8在原来的数组中是第二位,7是第四位,等等
得到一个表示原来位置的数组intc[5]={2,4,5,3,1}*/
#include<stdio.h>
voidmain()
{
inti,j,k=0;
inta[5]={3,8,4,7,6};
intb[5]={8,7,6,4,3};
intc[5]={0};
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
{
if(b[i]==a[j])
{
c[k++]=j+1;//因为说的是第几位而不是下标所以加1
break;
}
}
}
for(i=0;i<5;i++)
{
printf("%d",c[i]);
}
}
24531Pressanykeytocontinue
㈥ C语言用冒泡法对一维数组中10个数按降序进行排列
#include<stdio.h>
intmain()
{
intn[]={1,2,3,4,5,6,7,8,9,10};
inti,j,num;
for(i=0;i<10;i++)
{
for(j=i+1;j<10;j++)
{
if(n[i]<n[j])
{
num=n[i];
n[i]=n[j];
n[j]=num;
}
}
}
printf("1,2,3,4,5,6,7,8,9,10冒泡降序排列后为:");
for(i=0;i<10;i++)
printf("%d",n[i]);
return0;
}
㈦ C语言数组排序
#include<stdio.h>
intsd[81];
intshow(intk)
{inti,j,n,m=k%9;
for(j=k-m;j<k-m+9;j++)
printf("%3d",sd[j]);
printf(" ");
for(j=m;j<81;j+=9)
printf("%*c%02d ",3*m,'',sd[j]);
j=k-k%27+3*(k%9/3);
for(i=0;i<3;i++)
{for(n=j;n<j+3;n++)
printf("%3d",sd[n]);
j+=9;
printf(" ");
}
return0;
}
intmain()
{intk;
for(k=0;k<81;k++)
sd[k]=k;
scanf("%d",&k);
show(k+1);
return0;
}
㈧ c语言一维数组冒泡排序
如果遇到相等的值不进行交换,那这种排序方式是稳定的排序方式。 原理:比较两个相邻的元素,将值大的元素交换到右边 思路:依次比较相邻的两个数,将比较小的数放在前面,比较大的数放在后面。 (1)第一次比较:首先比较第一和第二个数,将小数放在前面,将大数放在后面。 (2)比较第2和第3个数,将小数 放在前面,大数放在后面。 ...... (3)如此继续,知道比较到最后的两个数,将小数放在前面,大数放在后面,重复步骤,直至全部排序完成 (4)在上面一趟比较完成后,最后一个数一定是数组中最大的一个数,所以在比较第二趟的时候,最后一个数是不参加比较的。 (5)在第二趟比较完成后,倒数第二个数也一定是数组中倒数第二大数,所以在第三趟的比较中,最后两个数是不参与比较的。 (6)依次类推,每一趟比较次数减少依次比上一趟减少一次。 算法分析: (1)由此可见:N个数字要排序完成,总共进行N-1趟排序,每i趟的排序次数为(N-i)次,所以可以用双重循环语句,外层控制循环多少趟,内层控制每一趟的循环次数 (2)冒泡排序的优点:每进行一趟排序,就会少比较一次,因为每进行一趟排序都会找出一个较大值。如上例:第一趟比较之后,排在最后的一个数一定是最大的一个数,第二趟排序的时候,只需要比较除了最后一个数以外的其他的数,同样也能找出一个最大的数排在参与第二趟比较的数后面,第三趟比较的时候,只需要比较除了最后两个数以外的其他的数,以此类推……也就是说,没进行一趟比较,每一趟少比较一次,一定程度上减少了算法的量。 (3)时间复杂度 1.如果我们的数据正序,只需要走一趟即可完成排序。所需的比较次数C和记录移动次数M均达到最小值,即:Cmin=n-1;Mmin=0;所以,冒泡排序最好的时间复杂度为O(n)。 2.如果很不幸我们的数据是反序的,则需要进行n-1趟排序。每趟排序要进行n-i次比较(1≤i≤n-1),且每次比较都必须移动记录三次来达到交换记录位置。在这种情况下,比较和移动次数均达到最大值: 综上所述:冒泡排序总的平均时间复杂度为:O(n2) ,时间复杂度和数据状况无关。 void BubbleSort(int a[], int len) { int i, j, temp; for (j = 0; j < len - 1; j++) { for (i = 0; i < len - 1 - j; i++) if (a[i] > a[i + 1]) { temp = a[i]; a[i] = a[i + 1]; a[i + 1] = temp; } } }
㈨ 关于C语言一维数组排序问题
冒泡排序法:
#include<stdio.h>
void main()
{ int a[5]={5,4,3,2,9},i,k,temp;
for(k=0;k<5;k++)
{for(i=k+1;i<5;i++)
if(a[k]<a[i])
{temp=a[k];
a[k]=a[i];
a[i]=temp;
}
printf(" %d",a[k]);
}
getch();
}
以下是各种基本排序的算法,有时间可以看看
选择排序:
#include "stdio.h"
#define N 5
main()
{
int i,j,k,t;
int a[N];
printf("请输入五位数:\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[k]>a[j]) k=j;
if(i!=k)
{
t=a[k];
a[k]=a[i];
a[i]=t;
}
}
for(i=0;i<N;i++)
printf("%d\t",a[i]);
printf("\n");
}
插入排序法:
#include "stdio.h"
#define N 5
main()
{
int i,j,k;
int a[N];
printf("请输入五位数:\n");
for(i=0;i<N;i++)
scanf("%d",&a[i]);
for(i=0;i<N;i++)
{
k=a[i];
j=i-1;
while(j>=0&&k<a[j])
{
a[j+1]=a[j];
j--;
}
a[j+1]=k;
}
for(i=0;i<N;i++)
printf("%d\t",a[i]);
printf("\n");
}
shell排序法:
#include "stdio.h"
#define N 10
main()
{
int i,j,k,m,flag;
int a[N]={10,33,23,45,12,67,44,22,33,18};
m=N;
while(m>1)
{
m=(m+1)/2;
do
{
flag=0;
for(i=0;i<N-m;i++)
{
j=i+m;
if(a[i]>a[j])
{
k=a[i];a[i]=a[j];a[j]=k;flag=1;
}
}
}while(flag);
}
for(i=0;i<N;i++)
printf("%d ",a[i]);
printf("\n");
}
如果对你有所帮助,请记得点赞最佳答案,谢谢!