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(); }