疯狂java


您现在的位置: 疯狂软件 >> 新闻资讯 >> 正文

java中的四大排序逻辑


 

在编程中我们最长接触到的就是排序了,各种逻辑和算法、不过循环方式是最让人晕眩的,今天,我们就一起来看看几个程序员最常接触到的排序写法。
   
    1.基数排序 java
    
    bool radixsort(int *array,int n)
   
    { L TENL[10];         //其中TENL[m].number中存储,数据的第i位为m的数据
   
    int k;
   
    for(int i=0;i<10;i++)
   
    TENL[i].n=0;
   
    for(i=1;i<=5;i++)       //这里假设 数据都 小于100000,对数据进行五次分配
   
    { for(int j=0;j<n;j++)    //对数据进行分配
   
    { k=getnum(array[j],i);
   
    TENL[k].number[TENL[k].n]=array[j];
   
    TENL[k].n++;}
   
    j=0;
   
    for(k=0;k<10;k++)        //将此次分配后的数据,按顺序重新置入array中
   
    {for(int m=0;m<TENL[k].n;m++)
   
    array[j++]=TENL[k].number[m];
   
    TENL[k].n=0; } }
   
    return true;}
   
    int   getnum(int num,int i)        //从个位起,获得num的第i为数据
   
    {int temp=1;
   
    for(int j=0;j<i;j++)
   
    temp=temp*10;
   
    return (num%temp-num%(temp/10))/(temp/10);}
   
    2.简单的选择排序
   
    bool selectionsort(int *array,int n)     //array为存储数据的数组,n为数组元素个数
   
    {int k,temp;        //k用来存储,临时最小数据的位置
   
    for(int i=0;i<n-1;i++)
   
    {k=i;
   
    for(int j=i+1;j<n;j++)//从第i个数开始选择最小数位置,存于k中
   
    if(array[j]<array[k])
   
    k=j;
   
    if(k!=i)    //若最小数,不为array[i],则array[i]与array[k]进行交换
   
    { temp=array[i];
   
    array[i]=array[k];
   
    array[k]=temp;  }  }
   
    return true; }
   
    3.插入排序
   
    bool insertionsort(int *array,int n)
   
    {int temp;    //用来存储,插入的数据
   
    for(int i=1;i<n;i++)
   
    {temp=array[i]; //用temp记录array[i]
   
    for(int j=i-1;j>=0;j--)   //逐个向前寻找插入点
   
    { if(temp>array[j])   //找到,跳出循环
   
    break;
   
    else     //没找到,将前一个数据后移
   
    array[j+1]=array[j];}
   
    array[j+1]=temp;}
   
    return true;}
   
    4.冒泡排序
   
    bool bubblesort(int *array,int n)
   
    {int flag=1,        //用来标记是否发生交换
   
    temp;
   
    for(int i=0;i<n-1;i++)
   
    { for(int j=i+1;j<n;j++)
   
    { if(array[j]<array[j-1])
   
    {temp=array[i];
   
    array[i]=array[j];
   
    array[j]=temp;
   
    flag=0; }
   
    }
   
    if(flag)    //如果flag为真,及没发生交换,直接跳出循环
   
    break;
   
    else
   
    flag=1;
   
    }
   
    return true; }