Exemplo n.º 1
0
        private void InsSort(int _lena)
        {
            int    k, j;
            string key_tmp, key_ar;
            bool   eoc;

            for (k = 1; k < _lena; k++)
            {
                tmpCar  = arCars[k];
                key_tmp = tmpCar.S.ToString("D3") + tmpCar.V.ToString("0.0");
                j       = k - 1;
                eoc     = false;
                while (!eoc)
                {
                    key_ar = arCars[j].S.ToString("D3") + arCars[j].V.ToString("0.0");
                    if (String.Compare(key_ar, key_tmp) <= 0)
                    {
                        eoc = true;
                    }
                    else
                    {
                        arCars[j + 1] = arCars[j];
                        j             = j - 1;
                        if (j < 0)
                        {
                            eoc = true;
                        }
                    }
                }
                arCars[j + 1] = tmpCar;
            }
        }
        public unsafe void FileSort(string _fn)
        {
            int    i, j, k;         /* + */
            int    flen;
            string key_tmp, key_ar; /* + */
            bool   eoc;             /* + */
            string s;               // is not used.

            CFileMngm.TbCars *bCars  = stackalloc CFileMngm.TbCars[1];
            byte[]            bbCars = new byte[sizeof(CFileMngm.TbCars)];
            CFileMngm.TbCars  tmpCar;
            //Load file to array
            FileStream fCars = File.OpenRead(_fn);

            flen = (Int32)fCars.Length / sizeof(CFileMngm.TbCars);
            CFileMngm.TbCars[] arCars = new CFileMngm.TbCars[flen];
            for (i = 0; i < flen; i++)
            {
                fCars.Read(bbCars, 0, bbCars.Length);
                Marshal.Copy(bbCars, 0, (IntPtr)bCars, bbCars.Length);
                arCars[i] = bCars[0];
            }

            //Sort array
            for (i = 1; i < flen; i++) /* + */     // begin with the second one
            {
                tmpCar  = arCars[i]; /* + */       // chose it
                key_tmp = tmpCar.S.ToString("D3"); // key field Speed
                for (k = 0; k < 30; k++)
                {
                    key_tmp = key_tmp + tmpCar.Mark[k].ToString();
                }
                key_tmp = key_tmp + tmpCar.V.ToString("0.0");
                j       = i - 1; /* + */                   // artificially generated an index of the previous one
                eoc     = false; /* + */                   // falsed end of circle
                while (!eoc) /* + */                       // check
                {
                    key_ar   = arCars[j].S.ToString("D3"); // next
                    bCars[0] = arCars[j];                  // removed to the buffer
                    for (k = 0; k < 30; k++)
                    {
                        key_ar = key_ar + bCars->Mark[k].ToString();  // chose the record with field and the key field
                    }
                    key_ar = key_ar + arCars[j].V.ToString("0.0");    // and added it the next key field
                    if (String.Compare(key_ar, key_tmp) <= 0) /* + */ // аналог A[j] < tmp
                    {
                        eoc = true;                                   /* + */
                    }
                    else                                              /* + */
                    {
                        arCars[j + 1] = arCars[j];                    /* + */
                        j             = j - 1;                        /* + */
                        if (j < 0)
                        {
                            eoc = true;
                        }
                    }
                }
                arCars[j + 1] = tmpCar;            /* + */
            }
            fCars.Close();
            fCars = File.OpenWrite(_fn);
            for (i = 0; i < flen; i++)
            {
                bCars[0] = arCars[i];
                Marshal.Copy((IntPtr)bCars, bbCars, 0, bbCars.Length);
                fCars.Write(bbCars, 0, bbCars.Length);
            }
            fCars.Close();
        }