首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件开发 >

兑现只有0、1、2的数组的排序

2013-07-11 
实现只有0、1、2的数组的排序#includeiostream#includestdlib.husing namespace stdvoid PrintArry(int

实现只有0、1、2的数组的排序

#include<iostream>#include<stdlib.h>using namespace std;void PrintArry(int arry[],int len){    for(int i=0;i<len;i++)        cout<<arry[i]<<" ";    cout<<endl;}void swap(int arry[],int i,int j){    int temp=arry[i];    arry[i]=arry[j];    arry[j]=temp;}void sort(int arry[],int len){    int i= 0;//头指针指向0    int j = len - 1;//尾指针指向2    int k = 0;//中间指针指向1    while(i <= j && k <= j && i <= k)    {        //i指向第一个非0值        while(arry[i] == 0){            i++;        }        //k指向第一个非1值        while(arry[k] == 1){            k++;        }        //j指向第一个非2值        while(arry[j] == 2){            j--;        }        if(i <= j && arry[j] == 0 && arry[i] == 2){            swap(arry,i,j);            i++;            j--;        }        else if(k <= j && arry[k] == 2 && arry[j] == 1){            swap(arry,k,j);            k++;            j--;        }        else if(i <= k && arry[k] == 0 && arry[i] == 1){            swap(arry,k,i);            i++;            k++;        }        else if(i < k && k < j){            arry[i] = 0;            arry[k] = 1;            arry[j] = 2;            i++;            k++;            j--;        }        if(i>k)        {            k=i;        }    } }void main(){    int arry[]={1,0,2,2,0,1,0,1};    int len=sizeof(arry)/sizeof(int);    PrintArry(arry,len);    sort(arry,len);    PrintArry(arry,len);    system("pause");}                
经试验sort函数好像还可以精简
void sort(int arry[],int len)
{

int i= 0;//头指针指向0
int k = 0;//中间指针指向1
int j = len - 1;//尾指针指向2
while(k <= j && i <= k)
{
//i指向第一个非0值
while(arry[i] == 0)
i++;
//k指向第一个非1值
while(arry[k] == 1)
k++;
//j指向第一个非2值
while(arry[j] == 2)
j--;
if(i > k)
k = i;

if(i < j && arry[j] == 0 && arry[i] == 2)
{
swap(arry,i,j);
}
else if(k <j && arry[k] == 2 && arry[j] == 1)
{
swap(arry,k,j);
}
else if(i < k && arry[k] == 0 && arry[i] == 1)
{
swap(arry,k,i);
}
else if(i < k && k < j)
{
arry[i] = 0;
arry[k] = 1;
arry[j] = 2;
}
}?
}

热点排行