C#常见面试题--排序
常见的排序算法有:冒泡排序,选择排序,插入排序,希尔排序,快速排序,归并排序,堆排序,基数排序,鸡尾酒排序,二叉树排序。
其中,选择排序,希尔排序,堆排序,快速排序 属于不稳定排序,其他排序属于稳定排序。
这里所说的稳定与不稳定是指在待排序的文件中,若存在多个关键字相同的记录,经过排序后这些具有相同关键字的记录之间的相对位置没有发生变化,则为稳定的排序,否则则为不稳定的排序。
以下一一进行代码实现:
其中用到了某些公用的函数方法:Swap(ref int left, ref int right)//两个数进行位置互换
/// <summary>
/// 交换位置
/// </summary>
/// <param name="left">前一个数</param>
/// <param name="right">后一个数</param>
private static void Swap(ref int left, ref int right)
{
int temp;
temp = left;
left = right;
right = temp;
}
/// 交换位置
/// </summary>
/// <param name="left">前一个数</param>
/// <param name="right">后一个数</param>
private static void Swap(ref int left, ref int right)
{
int temp;
temp = left;
left = right;
right = temp;
}
冒泡排序核心部分:
/// <summary>
/// 冒泡排序
/// </summary>
/// <param name="myArray">待排序的数组</param>
private static void BubbleSrot(int[] myArray)
{
for (int i = 0; i < myArray.Length - 1; i++)
{
for (int j = 0; j < myArray.Length - 1 - i;j++ )
{
if (myArray[j]>myArray[j+1])
{
Swap(ref myArray[j], ref myArray[j + 1]);
}
}
}
}
/// 冒泡排序
/// </summary>
/// <param name="myArray">待排序的数组</param>
private static void BubbleSrot(int[] myArray)
{
for (int i = 0; i < myArray.Length - 1; i++)
{
for (int j = 0; j < myArray.Length - 1 - i;j++ )
{
if (myArray[j]>myArray[j+1])
{
Swap(ref myArray[j], ref myArray[j + 1]);
}
}
}
}
选择排序核心部分:
/// <summary>
/// 选择排序
/// </summary>
/// <param name="myArray">待排序的数组</param>
private static void SelectSrot(int[] myArray)
{
int i, j, small;
for (i = 0; i < myArray.Length - 1;i++ )
{
small = i;
for (j = i + 1; j < myArray.Length;j++ )
{
if (myArray[j]<myArray[small])
{
small = j;
}
}
Swap(ref myArray[i], ref myArray[small]);
}
}
/// 选择排序
/// </summary>
/// <param name="myArray">待排序的数组</param>
private static void SelectSrot(int[] myArray)
{
int i, j, small;
for (i = 0; i < myArray.Length - 1;i++ )
{
small = i;
for (j = i + 1; j < myArray.Length;j++ )
{
if (myArray[j]<myArray[small])
{
small = j;
}
}
Swap(ref myArray[i], ref myArray[small]);
}
}
未完待续。。
浙公网安备 33010602011771号