1. c语言 输入十个整数,从大到小排序,并输出来。求解题思路
冒泡排序:
#include<stdio.h>
int main()
{ int a[10];
int i,j,t;
printf("input 10 numbers: ");
for(i=0;i<10;i++)
scanf("%d",&a[i]);//输入10个数值
printf(" ");
for(j=0;j<9;j++) //进行9轮比较
for(i=0;i<9-j;i++) //每一轮中进行9-j次比较
if(a[i]<a[i+1]) //相邻两个数比较
{t=a[i];a[i]=a[i+1];a[i+1]=t;}
printf("output 10 numbers: ");
for(i=0;i<10;i++)
printf("%d ",a[i]); //按顺序输出10个数值
printf(" ");
return 0;
}
当然很多行可以省掉。只是这样更清楚。
2. c语言排序的方法有多少种它们的核心思想是什么
很多
按插入,直接插入排序、折半插入排序、希尔插入排序
按交换,冒泡排序、快速排序
按选择,简单选择排序、堆排序
以及二路选择排序、外部排序,还有很多
3. 一道C语言中关于链表排序的代码的思路与步骤
/*代码的整体思路是分为3个函数,一个建立链表,一个链表排序,最后一个是输出链表,
而程序调用也是根据这个顺序来调用的,详细说明在下面*/
#include
#include
#define
LEN
sizeof(struct
number)
struct
number
{
int
num;
struct
number
*next;
};
int
n=0,sum=0;
void
main()
{
struct
number
*creat();
void
print(struct
number
*head);
struct
number
*change(struct
number
*head);
struct
number
*ahead;
ahead=creat();
sum+=n;
//sum计算结点的总数
change(ahead);
print(ahead);
}
struct
number
*creat()
//创建链表
{
struct
number
*p1,*p2,*head;
p1=p2=(struct
number*)malloc(LEN);
//LEN就是define定义的sizeof(struct
number)
printf("input
a
number,not
zero\n");
scanf("%d",&p1->num);
//将p1的num赋值为输入的数
while(p1->num!=0)
//如果输入的数不是0
{
n++;
//是记录链表节点的数量
if(n==1)
//如果n是建立的第一个结点,也就是链表的头
head=p1;
else
//否则p2的next指针指向p1,也就是原来链表最后一个结点的next指向新结点p1
p2->next=p1;
p2=p1;
//p2指向p1,每次p2都指向链表的结尾
p1=(struct
number*)malloc(LEN);
//申请内存,建立新结点
scanf("%d",&p1->num);
//再输入号
}
p2->next
=NULL;
//将尾结点的next指针指向NULL
return
head;
//返回头指针
}
struct
number
*change(struct
number
*head)
{
struct
number
*p,*h;
int
i;
for(i=1;i
next;p->next!=NULL;p=p->next,h=h->next)
//p指向头结点,h指向p的后一个结点,每循环一次p和h都往后指一个结点
if(p->num>h->num)
//如果前面的结点比后面结点大,就交换,只交换num的值
{
int
t;
t=p->num;
p->num=h->num;
h->num=t;
}
return
head;
}
void
print(struct
number
*head)
//链表的便利,只便利num值
{
struct
number
*p;
p=head;
while(p!=NULL)
{
printf("%d",p->num
);
p=p->next
;
}
}
4. c语言中插入排序的基本思想是什么
插入排序(Insertion sort)是一种简单直观且稳定的排序算法。如果有一个已经有序的数据序列,要求在这个已经排好的数据序列中插入一个数,但要求插入后此数据序列仍然有序,这个时候就要用到一种新的排序方法——插入排序法,插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序,时间复杂度为O(n^2)。是稳定的排序方法。插入算法把要排序的数组分成两部分:第一部分包含了这个数组的所有元素,但将最后一个元素除外(让数组多一个空间才有插入的位置),而第二部分就只包含这一个元素(即待插入元素)。在第一部分排序完成后,再将这个最后元素插入到已排好序的第一部分中。
插入排序的基本思想是:每步将一个待排序的记录,按其关键码值的大小插入前面已经排序的文件中适当位置上,直到全部插入完为止。
5. c语言选择排序是怎么实现的 思路是什么
在要排序的一组数中,选出最小(或者最大)的一个数与第1个位置的数交换;然后在剩下的数当中再找最小(或者最大)的与第2个位置的数交换,依次类推,直到第n-1个元素(倒数第二个数)和第n个元素(最后一个数)比较为止。
简单选择排序的示例:
6. 用C语言编写一个数据排序的程序,怎么做啊。求给个思路
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<time.h>
voidbubble_sort(inta[],intn)
{
inti,j,temp;
for(j=0;j<n-1;j++)
{
for(i=0;i<n-1-j;i++)
{
if(a[i]>a[i+1])
{
temp=a[i];
a[i]=a[i+1];
a[i+1]=temp;
}
}
}
}
intmain(void)
{
inti,n,*pdata;
intmin,max;
intmin_cnt=0,max_cnt=0;
scanf("%d",&n);
pdata=(int*)malloc(sizeof(int)*n);
if(pdata==NULL)
{
printf("动态内存分配失败! ");
exit(0);
}
srand(time(NULL));
for(i=0;i<n;i++)
{
*(pdata+i)=rand()%60-10;
}
bubble_sort(pdata,n);
for(i=0;i<n;i++)
{
printf("%d ",*(pdata+i));
}
min=*(pdata+0);
max=*(pdata+n-1);
for(i=0;i<n;i++)
{
if(min>=*(pdata+i))
{
min_cnt++;
}
break;
}
for(i=n-1;i>=0;i--)
{
if(max<=*(pdata+i))
{
max_cnt++;
}
break;
}
printf("最高温度%d出现次数%d ",max,max_cnt);
printf("最低温度%d出现次数%d ",min,min_cnt);
getch();
return0;
}
/*图形化界面需要你自己去研究了*/
7. C语言中选择排序法具体是怎样的
选择排序的基本思想是:每一趟在n-i+1(i=1,2,…n-1)个记录中选取关键字最小的记录作为有序序列中第i个记录。基于此思想的算法主要有简单选择排序、树型选择排序和堆排序。
简单选择排序的基本思想:第1趟,在待排序记录r[1]~r[n]中选出最小的记录,将它与r[1]交换;第2趟,在待排序记录r[2]~r[n]中选出最小的记录,将它与r[2]交换;以此类推,第i趟在待排序记录r[i]~r[n]中选出最小的记录,将它与r[i]交换,使有序序列不断增长直到全部排序完毕。
8. c语言,用选择法对10个数排序,按正负数分开输出
选择排序:大循环i依次取元素和后面所有元素比较,找出其中最值,和当前i的元素交换。一次大循环交换一次。
程序思路:
一、排序函数:根据传参,实现降序升序两种功能。
二、数组输出:根据传参,实现正数和负数输出两种功能。
下面是代码:
#include <stdio.h>
void px(int nums[],int len,int t);//排序
void showNums(int nums[],int len,int t);//输出
int main()
{
int nums[10]={8,7,-1,2,-5,4,9,-3,-6,1};
printf("原数组:8,7,-1,2,-5,4,9,-3,-6,1 ");
printf("升序排列后: ");
px(nums,10,1);
printf("|---正数为:");
showNums(nums,10,1);
printf("|---负数为:");
showNums(nums,10,0);
//--------------------------------
printf("降序排列后: ");
px(nums,10,0);
printf("|---正数为:");
showNums(nums,10,1);
printf("|---负数为:");
showNums(nums,10,0);
}
void showNums(int nums[],int len,int t)//t=1输出正数,t=0输出负数
{
int i;
for(i=0;i<len;i++)
if((t && nums[i]>0)||(!t && nums[i]<0))
printf("%d ",nums[i]);
printf(" ");
}
void px(int nums[],int len,int t)//t=1升序,t=0降序
{
int i,j,k,m;
for(i=0;i<len-1;i++)
{
m=nums[i],k=i;
for(j=i+1;j<len;j++)
if((t && m>nums[j])||(!t && m<nums[j])) m=nums[j],k=j;
m=nums[i],nums[i]=nums[k],nums[k]=m;
}
}
9. c语言怎样实现快速排序
include<stdio.h>
int arr_num[];
int length;
void quick_sort(int left, int right)
{
int i, j, c, temp;
if(left>right)
return;
i= left;
j= right;
temp = arr_num[i]
while(i != j)
{
while(arr_num[j]>=temp && i<j)
{
j--;
}
while(arr_num[i]<=temp && i<j)
{
i++;
}
if(i<j)
{
c = arr_num[i];
arr_num[i] = arr_num[j];
arr_num[j] = c;
}
}
//left为起始值(参照值)此时的I为第一次排序结束的最后值,与参照值交换位置
arr_num[left] = arr_num[i];
arr_num[i] = temp;
//继续递归直到排序完成
quick_sort(left, i-1);
quick_sort(i+1, right);
}
int main()
{
int i;
length = 7;
arr_num[length] = {23, 7, 17, 36, 3, 61, 49}
//快速排序调用
quick_sort(0, length-1);
//输出排序后的结果
for(i=1;i<=length;i++)
printf("%d ",arr_num[i]);
getchar();getchar();
return 0;
}
10. C语言,简要讲讲选择排序法的思路,内循环是每次都找此次最小的数么
很简单,把整个数组分为两个部分,前半部分为已排好序的数组,后半部分为待排序数组。一开始,前半部分长度为0,后半部分长度等于数组长度。然后,每次从后半部分中找出最大(最小)的数,将它加入到前半部分的尾部,后半部分长度减1,前半部分长度加1。重复上述过程,直到后半部分长度为0。