冒泡排序与选择排序
冒泡排序
简单 运行慢
1.比较两个数据
2.左边大交换两个数据
3.向右移重复1.2
/// <summary>
/// 冒泡排序
/// </summary>
/// <param name="arr"></param>
public static void BubbleSort(List<int>arr)
{
//控制冒泡次数
for (int i = 0; i < arr.Count-1; i++)
{
//i,i+1
for (int j = 0; j < arr.Count-1-i; j++)
{
//两两比较 i i+1
if (arr[j]>arr[j+1])
{
Swap(arr, j, j + 1);
}
}
}
}
/// <summary>
/// 两两交换
/// </summary>
/// <param name="arr"></param>
/// <param name="j"></param>
/// <param name="v"></param>
private static void Swap(List<int> arr, int j, int v)
{
int temp = arr[j];
arr[j] = arr[v];
arr[v] = temp;
}
选择排序
选出最小才交换 在冒泡基础上改良 交换最少
1.扫描整个序列
2.从中挑选出最小的数据项
3.将最小的数据项放置到合适的位置
/// <summary>
/// 选择排序
/// </summary>
/// <param name="arr"></param>
public static void SelectSort(List<int>arr)
{
for (int i = 0; i < arr.Count-1; i++)
{
//为i位置找到最小值
//假设当前位置恰好最小
int min = i;
//验证是否最小
for (int j = i+1; j < arr.Count; j++)
{
//是否发现更小的位置
if (arr[min]>arr[j])
{
min = j;
}
}
//最小位置是否真的最小
if (min!=i)
{
//假设失败交换
Swap(arr,min,i);
}
}
}
/// <summary>
/// 两两交换
/// </summary>
/// <param name="arr"></param>
/// <param name="j"></param>
/// <param name="v"></param>
private static void Swap(List<int> arr, int j, int v)
{
int temp = arr[j];
arr[j] = arr[v];
arr[v] = temp;
}