zoukankan      html  css  js  c++  java
  • 排序算法之0-1、0-1-2排序

    之前碰到个非常有意思的题目,是关于排序算法的题目:

    已知:一个数组:array,数组元素:0或1或2

    求解:将数组按照0-1-2排序?

      1 template <class T>
      2 void Swap(T& t1, T& t2)
      3 {
      4     T tmp = t1;
      5     t1 = t2;
      6     t2 = tmp;
      7 }
      8 
      9 // Sorting a array which the elements are 0 or 1.
     10 void SortArray_0_1(int* arr, int n)
     11 {
     12     int first = 0;      // point to 0.
     13     int last = n - 1;   // point to 1.
     14 
     15     while (first < last)
     16     {
     17         // Find the position of first 0.
     18         while (0 == arr[first])
     19         {
     20             first++;
     21         }
     22 
     23         // Find the position of first 1.
     24         while (1 == arr[last])
     25         {
     26             last--;
     27         }
     28 
     29         if (first <= last && 1 == arr[first] && 0 == arr[last])
     30         {
     31             Swap(arr[first], arr[last]);
     32             first++;
     33             last--;
     34         }
     35     }
     36 }
     37 
     38 // Sorting a array which the elements are 0 or 1.
     39 void SortArray2_0_1(int* arr, int n)
     40 {
     41     //int first = 0;      // point to 0.
     42     int last = n - 1;   // point to 2.
     43     int k = 0;          // point to 1.
     44 
     45     while (k < last)
     46     {
     47         // Find 0.
     48         if (1 == arr[k])
     49         {
     50             while (1 == arr[last] && k < last)
     51             {
     52                 last--;
     53             }
     54 
     55             if (k < last)
     56             {
     57                 Swap(arr[k], arr[last]);
     58             }
     59         }
     60 
     61         if (0 == arr[k])
     62         {
     63             k++;
     64         }
     65     }
     66 }
     67 
     68 // Sorting a array which the elements are 0 or 1 or 2.
     69 void SortArry_0_1_2(int* arr, int n)
     70 {
     71     int first = 0;      // point to 0.
     72     int last = n - 1;   // point to 2.
     73     int k = 0;          // point to 1.
     74 
     75     while (k < last)
     76     {
     77         // Find 0.
     78         if (0 == arr[k])
     79         {
     80             while (0 == arr[first] && first < k)
     81             {
     82                 first++;
     83             }
     84 
     85             if (first < k)
     86             {
     87                 Swap(arr[k], arr[first]);
     88             }
     89         }
     90 
     91         // Find 1.
     92         if (1 == arr[k] || k == first)
     93         {
     94             k++;
     95         }
     96 
     97         // Find 2.
     98         if (2 == arr[k])
     99         {
    100             while (2 == arr[last] && k < last)
    101             {
    102                 last--;
    103             }
    104 
    105             if (k < last)
    106             {
    107                 Swap(arr[k], arr[last]);
    108             }
    109         }
    110     }
    111 }
  • 相关阅读:
    苹果手机 iframe 无法滚动bug
    网页实现文件下载的一些方法
    Document对象中的一些重要的属性和方法(笔记)
    window对象中的一些重要的属性和方法(笔记)
    JS中的继承
    利用XMLHttpRequest(XHR)对象实现与web服务器通信
    JS对象中的原型
    JS中this的指向
    JS中的作用域和闭包
    HTML5新增的本地存储功能(笔记)
  • 原文地址:https://www.cnblogs.com/nchxmoon/p/4433046.html
Copyright © 2011-2022 走看看