数组的单简问题

win9886 2008-06-26 09:48:01
请问除了下面的这个方法还有其它的方法可以将数组存储的数值按顺序从小到大排列吗?请大家帮我写出几种不同的方法来,越多越好,谢谢了,注意请不要和下面的一样就行,
#include"stdio.h"
main()
{
int array[5];
int i,j,huan;
for(i=0;i<5;i++) scanf("%d",&array[i]);
for(i=0;i<4;i++)
{
for(j=i+1;j<5;j++)
if(array[i]>array[j])
huan=array[i],
array[i]=array[j],
array[j]=huan;
}
for(j=0;j<5;j++) printf("%d ",array[j]);
printf("\n");
}
...全文
116 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
noky 2008-06-26
  • 打赏
  • 举报
回复
去看看数据结构吧,N多种排序方法的
xkyx_cn 2008-06-26
  • 打赏
  • 举报
回复
google 数组排序
K行天下 2008-06-26
  • 打赏
  • 举报
回复
写几个吧:


#include <stdio.h>
#include <conio.h>

void quicksort(int a[],int l,int r) ;
void bubblesort(int arrat[], int N) ;
void insertsort(int R[], int n);

int main()
{
int array[5];
int i,j,huan;
for(i=0;i <5;i++)
scanf("%d",&array[i]);

//bubblesort(array, 5);
//quicksort(array,0,4);
insertsort(array,5);
for(j=0;j <5;j++)
printf("%d ",array[j]);
printf("\n");
getch();
return 0;
}

// 第一种:冒泡排序算法
void bubblesort(int array[], int N)
{
int i, j, huan;
for(i=0;i <N-1;i++)
{
for(j=i+1;j <N;j++)
if(array[i]>array[j])
{
huan=array[i];
array[i]=array[j];
array[j]=huan;
}
}
}

// 第二种:快速排序算法
void quicksort(int a[],int l,int r)
{
int i=l,j=r;
int temp=a[i];
while(i <j)
{
while((a[j]>temp)&&(j>i))
--j;
if(j>i)
{
a[i]=a[j];

++i;
}
while((a[i] <=temp)&&(j>i))
++i;
if(i <j)
{
a[j]=a[i];
--j;
}
}
a[i]=temp;
if(l <i-1)quicksort(a,l,i-1);
if(i+1 <r)quicksort(a,i+1,r);
}

// 第三种 直接插入排序算法
void insertsort(int R[], int n) //对顺序表R中的记录R[0..n-1]按递增序进行插入排序
{ //一开始 R0是有序区
int i, j, temp;
for(i=1; i<n; i++) //依次插入R[1],…,R[n-1]
if(R[i]<R[i-1]) //若R[i]大于等于有序区中所有的keys,则R[i]应在原有位置上
{
temp=R[i];
j=i-1; //temp是哨兵,且是R[i]的副本
do //从右向左在有序区R[1..i-1]中查找R[i]的插入位置
{
R[j+1]=R[j]; //将关键字大于R[i]的记录后移
j--;
}while(temp<R[j] && j>=0); //当R[i]≥R[j]时终止
R[j+1]=temp; //R[i]插入到正确的位置上
}
}


胡摩西 2008-06-26
  • 打赏
  • 举报
回复
// Sort.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
typedef struct
{
int key;
}elemtype;

void InsertSort(elemtype x[],int n)//简单插入排序
{
int i,j;
elemtype a;
for(i=0;i<n-1;i++)
{
a=x[i+1];
j=i;
while(j>-1 && a.key<x[j].key)
{
x[j+1]=x[j];
j--;
}
x[j+1]=a;
}
}

void SelectSort(elemtype x[],int n)//简单选择排序
{
int i,j,small;
elemtype swap;
for(i=0;i<n-1;i++)
{
small=i;
for(j=i+1;j<n;j++)
{
if(x[j].key<x[small].key)
small=j;
}
if(small!=i)
{
swap=x[i];
x[i]=x[small];
x[small]=swap;
}
}
}

void PopSort(elemtype x[],int n)//冒泡发排序
{
int i,j,flag;
elemtype swap;
flag=1;
for(i=0;i<n-1 && flag==1;i++)
{
flag=0;
for(j=0;j<n-1;j++)
if(x[j].key>x[j+1].key)
{
flag=1;
swap=x[j];
x[j]=x[j+1];
x[j+1]=swap;
}
if(flag==0)
return;
}
}

void QuickSort(elemtype x[],int left,int right)//快速排序
{
int i,j;
elemtype swap;
i=left;j=right;
swap=x[left];
while(i<j)
{
while(i<j && swap.key<=x[j].key)
j--;
if(i<j)
{
x[i]=x[j];
i++;
}
while(i<j && swap.key>=x[i].key)
i++;
if(i<j)
{
x[j]=x[i];
j--;
}
}
x[i]=swap;
if(left<i)
QuickSort(x,left,i-1);
if(i<right)
QuickSort(x,j+1,right);
}

void merge(elemtype R[],elemtype x[],int k,int n)//归并排序
{
int i1,i2,L1,L2,r1,r2,j;
L1=0;j=0;
while(L1+k<n-1)
{
L2=L1+k;
r1=L2-1;
r2=(L2+k-1<=n-1)?L2+k-1:n-1;
for(i1=L1,i2=L2;i1<=r1 && i2<=r2;j++)
{
if(R[i1].key<=R[i2].key)
{
x[j]=R[i1];
i1++;
}
else
{
x[j]=R[i2];
i2++;
}
}
while(i1<=r1)
{
x[j]=R[i1];
i1++;j++;
}
while(i2<=r2)
{
x[j]=R[i2];
i2++;j++;
}
L1=r2+1;
}
for(i1=1;i1<n;i1++,i2++)
x[j]=x[i1];
}

void MergeSort(elemtype R[],int n)//归并排序的调用函数
{
int i,k;
elemtype x[99];
k=1;
while(k<n)
{
merge(R,x,k,n);
for(i=0;i<n;i++)
R[i]=x[i];
k=2*k;
}
}

void PrintfNb(elemtype x[],int nCount)//输出数组元素
{
printf("排序结果:\n");
for(int i=0;i<nCount;i++)
printf("%d ",x[i].key);
printf("\n");
printf("排序结束...\n");
}

void main()
{
int n,i,nSelect;
elemtype nList[99];//定义一个数组
printf("请输入数组元素...\n");
for(i=0;i<99999;i++)
{
scanf("%d",&n);
if(n==0)
break;//输入0时创建数组完毕
nList[i].key=n;
printf("输入成功...\n");
}
printf("请选择排序方法...\n");
printf("1,简单插入排序 2,简单选择排序 3,冒泡发排序 4,快速排序 5,归并排序\n");
scanf("%d",&nSelect);
while(nSelect>5 || nSelect<1)
{
printf("请输入正确的序号!");
scanf("%d",&nSelect);
}
switch(nSelect)
{
case 1:
printf("你选择的是简单插入排序法...\n");
InsertSort(nList,i);
break;
case 2:
printf("你选择的是简单选择排序法...\n");
SelectSort(nList,i);
break;
case 3:
printf("你选择的是冒泡排序法...\n");
PopSort(nList,i);
break;
case 4:
printf("你选择的是快速排序法...\n");
QuickSort(nList,0,i);
break;
case 5:
printf("你选择的是归并排序法...\n");
MergeSort(nList,i);
}
PrintfNb(nList,i);
}

ForestDB 2008-06-26
  • 打赏
  • 举报
回复
goooooogle
richbirdandy 2008-06-26
  • 打赏
  • 举报
回复
简单问题。。。。
richbirdandy 2008-06-26
  • 打赏
  • 举报
回复
google 排序算法
这玩艺历史悠久 还将持续下去 lz结贴
neupeople 2008-06-26
  • 打赏
  • 举报
回复
楼主上边的排序应该是冒泡排序吧!
排序有很多种啊,快速,希尔,堆排序等等。
像楼上说的,随便买个数据结构的书就有。

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧