거품 정렬 C# 구현, 의뢰 사용, 3가지 방식 포함:Fun<>, 익명 방법, Lambda 표현식

4510 단어 lambda
거품 정렬은 간단한 정렬 방법으로 소량의 숫자 정렬에 적합하며 대량의 숫자(10개 이상)에 대해 더욱 효율적인 정렬 방법도 있다.여기서 실현된 거품 정렬은 기능을 실현해야 한다. 숫자 정렬뿐만 아니라 임의의 대상에 대해서도 정렬해야 한다.
예:
  • People 대상에 대한 Age(연령) 순서
  • Student 객체에 대한 Score(분수) 정렬
  • People:
        public class People
        {
            public string Name { get; set; }
            public int Age { get; set; }
            public People(string name, int age)
            {
                Name = name;
                Age = age;
            }
            public static bool CompareAge(People p1, People p2)
            {
                return p1.Age < p2.Age;
            }
            public override string ToString()
            {
                return string.Format("[people] name:{0},age:{1}", Name, Age);
            }
        } 

    Student:
        public class Student
        {
            public string Name { get; set; }
            public float Score { get; set; }
            public Student(string name, float score)
            {
                Name = name;
                Score = score;
            }
            public static bool CompareScore(Student s1, Student s2)
            {
                return s1.Score < s2.Score;
            }
            public override string ToString()
            {
                return string.Format("[student] name:{0},score:{1}",Name,Score);
            }
        } 

    거품 정렬의 실현은 Fun<>의 의뢰 작성법을 모르면 마지막으로 설명합니다.
        public static class Storter_Fun
        {
            public static void Sort<T>(IList<T> sortArray, Func<T, T, bool> comparision)
            {
                bool swapped = true;
                do
                {
                    swapped = false;
                    for (int i = 0; i < sortArray.Count - 1; i++)
                    {
                        if (comparision(sortArray[i + 1], sortArray[i]))
                        {
                            T temp = sortArray[i];
                            sortArray[i] = sortArray[i + 1];
                            sortArray[i + 1] = temp;
                            swapped = true;
                        }
                    }
                } while (swapped);
            }
        }  

    콘솔, 정렬 사용:
            static void Main(string[] args)
            {
                // 
                People[] peoples = {new People(" ",43),
                                   new People(" ",12),
                                   new People(" ",50),
                                   new People(" ",21),
                                   new People(" ",33),};
                //Fun<> 
                BubbleSorter.Storter_Fun.Sort<People>(peoples, People.CompareAge);
                // 
                BubbleSorter.Storter_Fun.Sort<People>(peoples, delegate(People p1, People p2)
                {
                    return p1.Age < p2.Age;
                });
                //Lambdah 
                BubbleSorter.Storter_Fun.Sort<People>(peoples, (People p1, People p2) =>
                {
                    return p1.Age < p2.Age;
                });
                foreach (var people in peoples)
                {
                    Console.WriteLine(people);
                }
                // 
                Student[] students = {new Student(" ",80.5F),
                                   new Student(" ",85),
                                   new Student(" ",88),
                                   new Student(" ",70),
                                   new Student(" ",95),};
                BubbleSorter.Storter_Fun.Sort<Student>(students, Student.CompareScore);
                foreach (var student in students)
                {
                    Console.WriteLine(student);
                }
                Console.ReadKey();
            }  

    의뢰: 호출 방법의 매개 변수는 일반적으로 수치형입니다. 예를 들어 int,string,DataTable 등입니다. 방법 자체를 매개 변수로 다른 방법에 전달할 수 있습니까?의뢰는 이 문제를 해결하는 것이다.매개 변수라면 유형이 있어야 한다.C#는 강한 유형이고 방법의 매개 변수는 int 유형이므로string 유형을 전송할 수 없습니다. 그렇지 않으면 편집 단계에서 잘못 보고합니다.int,string 등은 기존 형식입니다. 의뢰한 형식은 사용자 정의가 필요합니다.예:
  • Fun
    대표 방법은 두 개의 범용 매개 변수를 입력하여 bool로 되돌아오는 것이다.
  • Fun
    대표적인 방법은 int,string,DataTable, Array로 되돌아오는 세 가지 인자를 전송하는 것이다.
    마지막 매개 변수가 되돌아오는 값 형식이다.
    그러면 되돌아오는 값이 없으면?
  • Action
    대표 방법은 두 개의 범용 매개 변수를 입력했는데 값을 되돌려 주지 않았다
  • Action
    대표 방법은 두 개의 인자를 전송하는 것입니다: int,string, 되돌아오는 값이 없습니다
    의뢰의 유형을 정의했습니다. 들어오는 방법은 이 정의에 부합되어야 합니다. 즉, 들어오는 매개 변수, 유형, 개수, 순서, 되돌아오는 값이 일치해야 합니다. 그렇지 않으면 컴파일할 수 없습니다. C#가 강한 유형의 원인입니다.

  • 방금 실현된 거품은 서로 다른 대상의 정렬을 지원할 수 있는데 주로 거품을 크기를 비교하는 방법으로 전달(위탁)하고 데이터를 교환하는 임시 변수와 범용 실현을 사용한다.

    좋은 웹페이지 즐겨찾기