c++ 排序

来源:百度知道 编辑:UC知道 时间:2024/06/21 20:41:38
对johnson算法的编程
简单说就是有一个数组例
2 3 2 3
3 1 3 1
在这个数组中,挑一个最小的数,如果有多个,则随便选一个,然后如这个数在第一排,则将这列排在最前,如果在第二排则将这列排在最后。然后划去已排序的列,再按前面说的规则排序。
最后输出是1324 或3142(表示列数) 。只要求输出一组就可以

写的好像不是很清楚,可能描述存在问题
------------------------------------
噢,题我是看懂了,给我点时间,挑选最大最小值我有思路,就是把列移到最后或是最前应该是再新建一个数组专门来保存列数,
具体实现我还需要整理一下。

代码如下,实现了你说的功能,
代码写到网页上格式的层次感就不明显了。
*******************************************
#include<iostream>
using namespace std;

int a[4],b[4],c[4];//这里我暂且把数组长度设为4,你可以根据需要改变数值
int i,j,k,m=1,x=3,y=0;//i,j,k这些都是循环控制变量,m是用来判断a[i]和b[i]是否是最小值

void main()
{ cout<<"输入第一行的数\n"; //第一行的数字保存到a[]
for(i=0;i<4;i++)
{cin>>a[i];}
cout<<"输入第二行的数\n"; //第二行的数字保存到b[]
for(i=0;i<4;i++)
{cin>>b[i];}
//**********************************三层循环,宜从里面开始看./
for(k=0;k<4;k++) /*依次找到第1,2,3,4个最小值,*/
{
for(i=0;i<4;i++) /*依次判断最小值是否在第i=0,1,2,3列*/
{ m=1;
for(j=0;j<4;j++) /*最内层是判断第i列里面是否包含所有数的最小值*/
{ /*如果不是就把判断初值不为0的变量m的值改为0*/
if((a[i]>a[j]||a[i]>b[j])