精华内容
下载资源
问答
  • 判断一个数组是否有序

    万次阅读 2017-07-18 20:03:28
    一般来说,判断一个数组或序列是正序,倒序还是乱序,需要我们将这个数组完整的遍历一遍后才能得出答案,它不像折半查找那样只处理少量的数据便能得出结论,因为一段包含成千上万个元素的有序序列,哪怕将其中两个元素的...

            一般来说,判断一个数组或序列是正序,倒序还是乱序,需要我们将这个数组完整的遍历一遍后才能得出答案,它不像折半查找那样只处理少量的数据便能得出结论,因为一段包含成千上万个元素的有序序列,哪怕将其中两个元素的位置调换都能将这个序列变成乱序序列.如下面这段序列,只是数字8和9调换,就变成了乱序的.

    [0, 1, 2, 3, 4, 5, 6, 7, 9, 8, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]

    那么,怎样才能快速的判断序列是否有序呢?

    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]  // 序列arrayA
    [19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]  // 序列arrayB
    [12, 7, 2, 5, 4, 14, 6, 13, 1, 16, 18, 19, 9, 8, 15, 11, 10, 0, 17, 3]  // 序列arrayC

           上面三段序列,分别为正序, 乱序和无序, 我们观察发现, 假如用冒泡法排序的单次冒泡循环对以上三个数组进行排序(排序顺序为从小到大),  第一个序列(正序序列)的冒泡次数为0;  第二个序列(倒序序列)的冒泡次数为 : 序列长度 - 1;  第三个序列(乱序序列)的冒泡次数介于上面两种序列之间, 且中途"气泡"(即需要进行交换的元素)发生了变化. 以此为规律,  我们可以利用计数冒泡次数和气泡是否发生了改变来判断一段有限序列是正序, 倒序还是无序.
     

    // 根据数组需要冒泡的次数判断数组为顺序,逆序还是无序
        public static int lookArray(int[] array) {
            // 冒泡的次数
            int count = 0;
            // 上一次交换的"气泡"
            int pop = array[0];
            // 利用单次冒泡检验数组需要冒泡的次数
            for (int j = 0; j < array.length - 1; j++) {
                if (array[j] > array[j + 1]) {
                    // 判断此次需要向上冒的气泡是否和上次的相同,不同为乱序
                    if (pop != array[j]) {
                        // 若气泡发生了变化,证明是无序的,停止遍历,返回 0
                        return 0;
                    }
    
                    int temp = array[j];
                    array[j] = array[j + 1];
                    array[j + 1] = temp;
                    // 两相邻元素交换一次值,count计数一次
                    count++;
                    pop = array[j + 1];
                    //气泡向右移动,可能是逆序,对于逆序序列,还需保证气泡左侧所有的元素大于右侧
                    //所以当左侧最小的元素小于右侧元素时,为无序序列
                    if (j + 2 < array.length ){
                       if (array[j] < array[j+2]){
                        return 0;
                       }
                    }
                }
            }
            // 正序返回 1, 倒序返回 -1
            if (count == 0) {
                return 1;
            } else {
                return - 1;
            }
        }

        至此,我们实现了判断序列是否有序的算法. 我们可以在程序主入口main中调用这个方法,用一段乱序序列检验输出:
            

    int[] array = {7,1,2,3,4,5,6,0};
    int x = lookArray(array);
    
    if (x == 1) {
        System.out.println("正序");
    } else if (x ==  - 1) {
        System.out.println("逆序");
    } else if(x == 0) {
        System.out.println("无序");
    }

    输出为:

    无序

    至此,我们简单的实现了判断一段有限序列为正序,倒序,乱序的判别方法.

    展开全文
  • 判断一个数组是否有序 编写一个模板函数 is_sorted, 当且仅当a[0:n-1]有序时, 返回值是true。 #include <iostream> using namespace std; template <class T> bool is_sorted(T* a, int n) { int ...

    判断一个数组是否有序

    编写一个模板函数 is_sorted,
    当且仅当a[0:n-1]有序时, 返回值是true。

    #include <iostream>
    using namespace std;
    
    template <class T>
    bool is_sorted(T* a, int n) {
      int toLow = 0;
      int toHigh = 0;
      int i = 0;
      for (i = 0; i < n; i++) {
        if (a[i] > a[i+1]) {
          toLow ++;
        } else if (a[i] < a[i+1]) {
          toHigh ++;
        }
      }
      
      if ((toLow == i) || (toHigh == i )) return true;
      
      return false;
    }
    
    int main()
    {
      int arr[] = {1,2, 3, 4, 5, 6, 7, 8, 9};
      bool ret = is_sorted(arr, 9);
      cout << "the arr is sored : " << (ret ? "true" : "flase") << endl;
        
      return 0;
    }
    

    执行结果:

    the arr is sored : true
    

    2 当定义:

    int arr2[] = {1,2, 3, 4, 11, 6, 7, 8, 9};
    

    执行结果:

    the arr is sored : flase
    

    编写一个模板函数mismatch, 返回值是使 a[i] 不等于 b[i] 成立的最小索引i,
    0 <= i < n;

    template <class T>
    int mismatch(T* a, T* b, int n)
    {// Return smallest i such that a[i] != b[i].
     // Return n if no such i.
       for (int i = 0; i < n; i++) {
          if (a[i] != b[i]) {
             return i;
          }
       }
       // no mismatch
       return n;
    }
    
    展开全文
  • //判断一个数组是否有序(从小到大) public class isSorted { public static boolean isSorted(int arr[]){ for (int i = 0; i <arr.length-1; i++) { if(arr[i]>arr[i+1]){ return ...
    //判断一个数组是否有序(从小到大)
    public class isSorted {
        public static boolean isSorted(int arr[]){
            for (int i = 0; i <arr.length-1; i++) {
                if(arr[i]>arr[i+1]){
                    return false;
                }
            }
            return true;
        }
        public static void main(String[] args){
            int[] arr = {1,2,4,5,7};
            System.out.println(isSorted(arr));
        }
    }
    
    
    展开全文
  • 思路 升序:每次比较数组中的两个数的时候,最大的数一定是前一个 降序: 每次比较数组中的两个数的时候,最小的数一定是前一个 Flag1和flag2都是假的时候,返回flase,否则,返回flase ... //数组是否为升...

    思路

    升序:每次比较数组中的两个数的时候,最大的数一定是前一个

    降序: 每次比较数组中的两个数的时候,最小的数一定是前一个

    Flag1和flag2都是假的时候,返回flase,否则,返回flase

    代码

    public static boolean isSorted(int[] data) {
        boolean flag1 = false,flag2 = false;
        //数组是否为升序
        for (int i = 0; i < data.length-1; i++) {
            if (data[i] == Math.min(data[i], data[i + 1])) {
                flag1 = true;
            } else {
                flag1 = false;
                break;
            }
        }
        //数组是否为降序
        for (int i = 0; i < data.length - 1; i++) {
            if (data[i] == Math.max(data[i], data[i + 1])) {
                flag2 = true;
            } else {
                flag2 = false;
                break;
            }
        }
        if (flag1 || flag2) {
            return true;//有一个为真,即是已经排过序了
        } else {
            return  false;
        }
    }

    转载于:https://www.cnblogs.com/kexing/p/10319663.html

    展开全文
  • 主要介绍了php判断一个数组是否有序的方法,涉及php操作数组遍历的相关技巧,非常具有实用价值,需要的朋友可以参考下
  • STL/Boost里面有没有什么函数能判断一个数组是否有序的? 如果有,是升序的还是降序的能给出吗?
  • 这里只是判断数组是否有序,并没有判断正序还是倒序。正序、倒序以及所有数字相等都视为有序,特殊情况比如「1,1,2,2」这类也视为有序。 思路就是比较数组中相邻的两数字,并统计大于,等于和小于的数量,通过...
  • 具体代码如下: public class Test1_9 { public static void main(String[] args) { int[] arr={1,6,4,5,3,7,2};... } } if(i==arr.length-1) System.out.println("是有序数组"); } } 运行结果示例:
  • 遍历数组,如果存在 ... array[i+1] 则该数组不是有序的,否则这个数组是升序 public class TestDemo3 { public static boolean isSort(int[] array) { for (int i = 0; i < array.length - 1; i++) { if...
  • 2. 给定一组整数, 已知其每两个数都互不相同,判断这些数字是否能排成一个有序数组? 例:li = [1,3,4,2] 是有续的 可以排序为li =[1,2,3,4]  li = [2,4,6,8] 是无续的 可以排序为li =[1,2,3,4]  (不允许...
  • JAVA判断数组是否有序

    2020-12-14 15:45:20
    判断数组是否有序1.问题2.分析3.代码实现 1.问题 给定一个数组判断其是否有序,输出有序或无序; 2.分析 与数组排序类似,将数组从前往后进行比较,如果数组大下标中的元素比小下标中的元素小,则无序, 3.代码...
  • 判断数组是否有序排列的 说明,如果0和1的数据一样的话,暂时没有加入判断 public class Test { public static void main(String[] args) { // 定义一个变量,来标记结果 boolean is_sorted = true; // 定义...
  • 判断数组是否一个有序递增序列;只要遍历数组时判断array[i]>arr[i+1] 2.代码: public static boolean induge(int[]arr) { for(int i=0;i<arr.length-1;i++) {//之所以是arr.length是为了避免越界 if ...
  • 代码分享:php判断数组是否有序 ... 转自:http://www.jbxue.com/article/14723.html如何判断php的数组是否有序呢?这里分享一例php代码,实现了一个复杂度为N的算法,用来检测php数组是否有序。有需要...
  • 上一次写了数据结构与算法中的常用工具类和三种基本排序,详情见数据结构与算法——排序算法辅助工具编写与三种基本排序算法(Java实现)。...判断一个数组是否有序,有序返回true,无序返回false...
  • php判断数组是否有序

    千次阅读 2012-09-29 14:53:38
    今天就是国庆长假的最后一天,无心搞业务代码,看到群里讨论php如何判断数组有序,我就给实现了一个复杂度为N的算法,贴出代码供大家学习 function JudegSortArray($array) { if ($array [0] > $array [1]) { ...
  • //给定一个数组, 再给定一个元素, 找出该元素在数组中的位置.(顺序查找) public class Test6_find { public static void main(String[] args){ int[] arr={1,2,3,4,5,8}; System.out.print(find(arr,8)); } public ...
  • Java语言高分悬赏:怎么判断一个数组本身是否有序的,如果是增序输出1,逆序输出0,无序输出-1
  • 两种检索算法:在一个排好序的数组T[1…n]中查找x,如果x在T中,输出x在 T的下标j;如果x不在T中,输出j=0。 2.解析 方法1:直接遍历查找,因为可能存在多个值为x的数在数组中,所有预先开一个j[]数组接收下表,最后...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,087
精华内容 434
关键字:

判断一个数组是否有序