• 判断一个数是否是素数


    一、判断一个数是否是素数
            思想:拿比自己小的整数依次进行比较
            
        public String isSu(int a){
            for(int i = 2 ; i<a; i++) {
                if(a%i == 0){
                    return "不是";
                }
            }
            return "是";
       }
        //算法改进;只要小于该数字的二次根就可以了,因为大于该数字的二次根的数字也是不能整除的
       
        public String isSu(int a){
            for(int i = 2 ; i<Math.sqrt(a); i++) {
                if(a%i == 0){
                    return "不是";
                }
            }
            return "是";
       }  

    二、实现一个冒泡排序的算法
            //思想:依次比较相邻两个数的大小,大数放在后面,小数放在前面,直至比较最后两个数,将小数放在前面,大数放在后面,重复以上过程
        public void sort(int []array){
            for(int i=0;i<array.length;i++){
                for (int j=0;j<array.length-i-1;j++){
                    if(array[j]>array[j+1]){
                        int temp=array[j];
                        array[j]=array[j+1];
                        array[j+1]=temp;
                    }
                }
            }
        }
         平均时间复杂度为O(n2
    最好时间复杂度为O(n)
    三、插入排序算法(用于少量数据时候)
            //思想:在一个已经排序好的序列中插入一个数据
        private static int[] insertSort(int[] array) {
            for (int i = 1; i < array.length; i++) {
                int temp = array[i];
                for (int j = i - 1; j >= 0 && temp < array[j]; j--) {
                    array[j + 1] = array[j];
                    array[j] = temp;
                }
            }
            return array;
        }
         
    平均时间复杂度为O(n2) 最好时间复杂度为O(n)
    四、快速插入排序(效率较高)
            快速排序思想:
        一趟快速排序是:
    1,随机产生一数列,选取第一个数(这里也可选其他的数)作为比较的基石,假设这个数为X,这样X=A[0];设两个变量i=0,j=n-1;n是这个数列的长度
    2,从前面开始找,找到第一个比A[0]大的数,找到了就与X交换
    3,从后面开始找,找到第一个比A[0]小的数,找到了就与X交换
    4,重复步骤2,3,直到i=j;
    这样一趟快速排序就完成了;第一趟完成之后,X左边的数就全部小于X了,X右边的数九全部大于X,然后采用递归方式对X左边的数和X右边的数进行快速排序。
                /**  
         * @param pData 需要排序的数组  
         * @param left  左边的位置,初始值为0  
         * @param right 右边的位置,初始值为数组长度  
         */   
        public static void QuickSort(int[] pData,int left,int right)   
        {   
              int i,j;   
              int first,temp;   
              i = left;   
              j = right;   
              first = pData[left]; //这里选其他的数也行,不过一般选第一个  
              //一趟快速排序   
              while(true)   
              {   
                  //从第二个数开始找大于中枢的数 ,从前面开始找大于pData[left]的数  
                  while((++i)<right-1 && pData[i]<first);   
                  //从最后一个数开始找第一个小于中枢pData[left]的数   
                  while((--j)>left && pData[j]>first);   
                  if(i>=j)   
                      break;   
                  //交换两边找到的数   
                  temp = pData[i];   
                  pData[i] = pData[j];   
                  pData[j] = temp;   
              }   
              //交换中枢   
              pData[left] = pData[j];   
              pData[j] = first;   
              //递归快排中枢左边的数据   
              if(left<j)   
                QuickSort(pData,left,j);   
              //递归快排中枢右边的数据   
              if(right>i)   
                QuickSort(pData,i,right);   
        }    




















  • 相关阅读:
    网络流24题
    数据结构(脑洞题,BIT):COGS 2394. 比赛
    字符串(后缀数组||SAM):NOI2015 品酒大会
    数据结构(二维线段树,差分): NOI2012 魔幻棋盘
    HNOI 2016 省队集训日记
    图论(网络流):SCOI 2007 修车
    数据结构(虚树,动态规划):HNOI 2014 世界树
    线性代数(高斯消元):JSOI2008 球形空间产生器sphere
    组合数学(Pólya计数原理):UvaOJ 10601 Cubes
    数学计数原理(Pólya,高精度):SGU 294 He's Circles
  • 原文地址:https://www.cnblogs.com/wang3680/p/77a80fd38481f9a298f65fa9be02f947.html
Copyright © 2020-2023  润新知