插入排序算法c#

时间:2015-04-11 09:25:31

标签: c# algorithm sorting

我正在尝试在我的一个程序中实现Insertion排序。我一直在尝试创建的是一个排序程序(按升序或降序排列)但是我尝试使用快速排序和合并排序等算法,我对c#和编码很新。我在这里遇到的问题是我的文件包括一串代码,以及一个双/整数(例如:75.350,74.430,星期四,星期五),因为这个算法是为整数设计的。有没有办法转换它?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;

namespace ConsoleApplication3
{
    class Program
    {
        static void Main(string[] args)
        {
            StreamReader sh1Open = new StreamReader("c:..\\Files\\SH1_Open.txt");
            string Sh1OpenString = sh1Open.ReadToEnd();


            int[] x = { Convert.ToInt32(Sh1OpenString) };
            int j;
            int temp;

            for (int i = 1; i < x.Length; i++)
            {
                j = i - 1;

                while (j >= 0 && x[j]>x[j+1])
                {
                    temp = x[j];
                    x[j] = x[j + 1];
                    x[j + 1] = temp;

                    j = j - 1;
                }
            }

            for (int i = 0; i < x.Length; i++)
            {
                Console.WriteLine(x[i]);
            }

            Console.ReadKey();

        }
    }
}

2 个答案:

答案 0 :(得分:2)

最好的方法可能是使用带有IComparable约束的泛型方法。

T[] InsertionSort(T[] x) where T : IComparable<T>
{
    for (int i = 0; i < x.Length-1; i++)
    {
        int j = i+1;

        while (j>0)
        {
            if (x[j-1].CompareTo(x[j]) > 1)
            {
                T temp = x[j-1];
                x[j - 1] = x[j];
                x[j] = temp;

            }
            j--;
        }
    }

    return x;
}

或使用http://www.codecodex.com/wiki/Insertion_sort

中的算法
static void InsertSort(IComparable[] array)  
{  
    int i, j;  

    for (i = 1; i < array.Length; i++)  
    {  
        IComparable value = array[i];  
        j = i - 1;  
        while ((j >= 0) && (array[j].CompareTo(value) > 0))  
        {  
            array[j + 1] = array[j];  
            j=j-1;  
        }  
        array[j + 1] = value;  
    }  
}  

此外,这一行可能存在一个错误:

int[] x = { Convert.ToInt32(Sh1OpenString) };

因为你试图将整个文件转换为一个整数。

答案 1 :(得分:0)

由于在C#中为string定义了比较运算符,您只需将所有相关的int变量替换为string个变量即可。该算法应该运行相同(虽然有点慢)