排序算法c语言n个数字的排序

如题所述

我近期做练习的时候专门为排序做了一个c程序,你看看怎么样,包括了很多排序方法
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define LEN 10
//初始化数组
void init(int *arr,int len);
//打印数组元素
void print(int *arr,int len);
//打印堆元素
void printH(int *arr,int len);
//交换两个整数的值
void swap(int &a,int &b);
//简单插入排序
void inserts(int *arr,int len);
//冒泡排序
void bubbles1(int *arr,int len);
//简单选择排序
void selects(int *arr,int len);
//快速排序
void quicks(int *arr,int low,int high);
//希尔排序
void shells(int *arr,int len);
//归并
void merge(int *a,int len1,int *b,int len2,int *c);
int main()
{
int arr[LEN],brr[LEN],crr[2*LEN];
srand((unsigned)time(NULL));
init(arr,LEN);
print(arr,LEN);
bubbles1(arr,LEN);
print(arr,LEN);
init(arr,LEN);
print(arr,LEN);
selects(arr,LEN);
print(arr,LEN);
init(arr,LEN);
print(arr,LEN);
inserts(arr,LEN);
print(arr,LEN);
init(arr,LEN);
print(arr,LEN);
quicks(arr,0,LEN);
print(arr,LEN);
init(arr,LEN);
init(brr,LEN);
print(arr,LEN);
print(brr,LEN);
shells(arr,LEN);
shells(brr,LEN);
merge(arr,LEN,brr,LEN,crr);
print(crr,2*LEN);
return 0;
}
//初始化数组
void init(int *arr,int len)
{
int i;
for(i=0;i<len;i++)
{
arr[i]=rand()%1000;
}
}
//打印数组元素
void print(int *arr,int len)
{
int i;
printf("\n");
for(i=0;i<len;i++)
printf("%4d ",arr[i]);
printf("\n");
}
//打印堆元素
void printH(int *arr,int len)
{
int i;
printf("\n");
for(i=0;i<len;i++)
printf("%4d ",arr[i]);
printf("\n");
}
//交换两个整数的值,^功能为异或,相同0,相异1
void swap(int &a,int &b)
{
a=a^b;
b=a^b;
a=a^b;
}
//插入排序
void inserts(int *arr,int len)
{
int i,j,temp;
for(i=1;i<len;i++)
{
temp=arr[i];
for(j=i-1;j>=0&&arr[j]>temp;j--)
arr[j+1]=arr[j];
arr[j+1]=temp;
}
}
//冒泡排序
void bubbles1(int *arr,int len)
{
int i,j,exchange;
exchange=0;
for(i=0;i<len-1;i++)
{
for(j=0;j<len-i-1;j++)
{
if(arr[j]>arr[j+1])
{
swap(arr[j],arr[j+1]);
exchange=1;
}
}
if(!exchange)
break;
}
}
//简单选择排序
void selects(int *arr,int len)
{
int i,j,temp;
for(i=0;i<len-1;i++)
{
temp=i;
for(j=i+1;j<len;j++)
{
if(arr[j]<arr[temp])
{
temp=j;
}
}
if(temp!=i)
{
swap(arr[temp],arr[i]);
}
}
}
//快速排序
void quicks(int *arr,int low,int high)
{
int temp,l,r;
if(low<high)
{
l=low;
r=high;
temp=arr[low];
while(low<high)
{
while(low<high&&arr[high]>=temp)
high--;
if(low<high)
arr[low]=arr[high];
while(low<high&&arr[low]<=temp)
low++;
if(low<high)
arr[high]=arr[low];
}
arr[low]=temp;
quicks(arr,l,low-1);
quicks(arr,low+1,r);
}
}
//希尔排序
void shells(int *arr,int len)
{
int i,j,gap;
for(gap=len/2;gap>0;gap/=2) //步长
for(i=gap;i<len;i++)
for(j=i-gap;j>=0&&arr[j]>arr[j+gap];j-=gap)
swap(arr[j],arr[j+gap]);
}
//两有序数组合并
void merge(int *a,int len1,int *b,int len2,int *c)
{
int i=0,j=0,k=0;
while(i<len1&&j<len2)
{
if(a[i]<=b[j])
{
c[k]=a[i];
k++;
i++;
}
else
{
c[k]=b[j];
k++;
j++;
}
}
if(i<len1)
c[k++]=a[i++];
else if(j<len2)
c[k++]=b[j++];
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2016-12-14
#include <stdio.h>
void sort(int *a,int len)
{int i=0,j,t;
for(i=0;i<len-1;i++)
for(j=0;j<len-i-1;j++)
if(a[j]>a[j+1])
{
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
int main()
{int i,n,a[100];
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
sort(a,n);
for(i=0;i<n;i++)
printf("%d ",a[i]);
return 0;
}本回答被网友采纳

c语言编程,对N个数排序(用数组) 急,, 谢谢
为了对N个数进行排序,使用数组和C语言编写程序,具体步骤如下:首先,定义数组大小N和数组元素a。这里我们设定N为10,并使用for循环初始化数组元素。循环从0到N-1,逐个输入数字到数组中。接下来,实现冒泡排序算法对数组进行排序。定义变量i、j和临时变量temp。外层循环从0到N-1,内层循环从0到N-i...

c语言 若对任意n个数进行排序,应该如何操作?
\/*选择排序法:从小到大排列10个数并输出*\/#include<stdio.h>#define N 10 \/\/可修改输入个数void main(){ int i,a[N],t,j; for(i=0;i<N;i++) scanf("%d",&a[i]); \/\/输入 for(j=1;j<N;j++) \/\/N次比较 for(i=0;i<j;i++) \/\/每趟中比j...

设计C语言程序,用一维数组输入N个整数,将这n个整数按从大到小排列_百度...
给你看看C语言的三种排序方法吧,这是我们老师给总结的,你看懂后就自己在写这个程序吧!一、冒泡法(起泡法)算法要求:用起泡法对10个整数按升序排序。算法分析:如果有n个数,则要进行n-1趟比较。在第1趟比较中要进行n-1次相邻元素的两两比较,在第j趟比较中要进行n-j次两两比较。比较的顺序...

排序算法c语言n个数字的排序
\/\/冒泡排序 void bubbles1(int *arr,int len);\/\/简单选择排序 void selects(int *arr,int len);\/\/快速排序 void quicks(int *arr,int low,int high);\/\/希尔排序 void shells(int *arr,int len);\/\/归并 void merge(int *a,int len1,int *b,int len2,int *c);int main(){ int ...

排序问题(C语言)
插入排序很简单的,一共n个数,每次去第i个,与前面的i-1个比较,这i-1是排好序的。while内循环的作用就是把第i个数与前面的i-1个比较,所以j--的意思就是倒过去找。要理解R[j+1]=temp,就要看懂temp的作用,temp用来暂时保存当前需要插入的数,也就是第[i]个,这样把temp与前面每个数...

C语言:输入一个小于100的正整数n,然后输入n个整数存入一维数组中,对...
这个程序的写法是比较标准而简单的,先输入一个整数n,然后使用一个循环输入n个整数到一维数组当中,在使用一个简单的排序方法,比方说冒泡排序就可以对数组进行从大到小的排序,最后输出就可以了.include <stdio.h> void bubble_sort(int a[], int n){ int i, j, t;for (i = 0; i < n...

编写一个对n个数进行排序(由小到大)的函数,在main()函数中输入n个数...
自定义函数sort(int *p, int n),功能是对n个数排序。在main函数中,调用它,对输入的任意个数排序。include<stdio.h> int sort(int*p,int n){ int i,j,t;for(i=0;i<n-1;i++)for(j=i+1;j<n;j++)if(p[i]>p[j]){ t=p[i];p[i]=p[j];p[j]=t;} } int main(){...

c语言编程:输入一个数字n,再输入n个数,将这个n个数从小到大输出。
n,i;scanf(输入n的值);\/\/输入个数 int array;\/\/把需排序的数列定义为数组。这里需要指出的是,如果定义为array[n-1],因为你的n在编译时未赋值,所以编译是不会通过的。于是这里直接将它定义为一个指针,赋值方法跟数组相同。但是个数太多就不能这么做了 for(i = 0;i < n;i++){ \/\/输入...

如何使用c语言排序?
否则,不要交换。(2)气泡排序:交换和重复两个相邻数字的过程。一般来说,如果有n个数字要排序,则需要n-1起泡。(3)选择排序:在交换顺序的基础上,找出剩余数量的最大值,并与地面上的I+1数量进行交换,使得每轮比较中只有一次交换操作,该算法最多只有n-1个交换操作。

C语言求算法,任意输入n个数(n为变量) 输出这几个数按从大到小排名时所 ...
scanf("%d", &n); for(Min = 1, i = 1; i <= n; i++) { scanf("%d", &s[i]); a[i] = s[i]; if(s[i] < Min) Min = s[i]; } Min--;for(i = 1, k = 0; i <= n; i++) { for(j = 2, max = 1; j <= n; j++) ...

相似回答