排序算法

本文介绍了三种基本的排序算法:选择排序、插入排序和冒泡排序。通过C#代码实现了这些算法,并给出了具体的运行示例。
ContractedBlock.gifExpandedBlockStart.gifCode
using System;

public abstract class SortStrategy
{
    
public abstract void Sort(int[] list);
}
/*选择排序
一次选定数组中的每一个数,记下当前位置并假设它是从当前位置开始后面数中的最小数min=i,
 * 从这个数的下一个数开始扫描直到最后一个数,并记录下最小数的位置min,扫描结束后如果min不等于i,
 * 说明假设错误,否则交换min与i位置上数。

*/
public class ChoiceSort : SortStrategy
{
    
public override void Sort(int[] list)
    {
        
int min;
        
for (int i = 0; i < list.Length; i++)
        {
            min 
= i;
            
for (int j = i + 1; j < list.Length; j++)
            {
                
if (list[j] < list[min])
                {
                    min 
= j;
                }
            }
            
int temp = list[min];
            list[min] 
= list[i];
            list[i] 
= temp;
        }
    }
}
/*插入排序
 * 假设待排序的记录存放在数组R[1..n]中。初始时,R[1]自成1个有序区,无序区为R[2..n]。
 * 从i=2起直至i=n为止,依次将R[i]插入当前的有序区R[1..i-1]中,生成含n个记录的有序区。
*/
public class InsertSort : SortStrategy
{
    
public override void Sort(int[] list)
    {
        
//10,4,5,20,90
        for (int i = 1; i < list.Length; i++)
        {
            
int temp = list[i];
            
int j = i;
            
while (j > 0 && list[j - 1< temp)
            {
                list[j] 
= list[j - 1];//将小的数放到后面
                --j;
            }
            list[j] 
= temp;
        }
    }
}

//冒泡排序  两重循环 将最大的数放到前面
public class BubbleSort : SortStrategy
{
    
public override void Sort(int[] list)
    {
        
for (int i = 0; i < list.Length; i++)
        {
            
for (int j = i + 1; j < list.Length; j++)
            {
                
if (list[j] > list[i])
                {
                    
int temp = list[i];
                    list[i] 
= list[j];
                    list[j] 
= temp;
                }
            }
        }
    }
}

public class Client
{
    
static void Main()
    {
        ChoiceSort s 
= new ChoiceSort();
        
int[] arr = {10,4,5,20,90 };
        s.Sort(arr);
        
foreach (int i in arr)
        {
            Console.WriteLine(i.ToString()
+"<br/>");
        }
    }
}

转载于:https://www.cnblogs.com/trampt/archive/2009/09/09/1563000.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值