《冒泡排序和选择排序》
冒泡排序:
冒泡排序:两两相比,如果前面大于后面的值交换位置
外循环要经过多少轮比较 一轮找出一个最值
内循环比较多少次 例如5个数比较4次即可 下一轮的时候 不用和上传最值进行比较,所以写内循环次数可以 这样写list.Count-1-i
List<int> list = new List<int>() { 1,99,2,8,11,20,16,89};
for (int i = 0; i < list.Count-1; i++) //为啥减- ,例如数组的个数为5的话,只需要找出4个最值即可
{
for (int j = 0; j < list.Count - 1; j++) //内循环目的是为了要进行比较,并且交换位置
// j<list.Count-1-i:之前已经找出最值,下轮没必要和上轮最值进行比较
{
if (list[i] == list[j + 1])//比较相邻位置交换位置 如果前面的大 交换位置
{
int temp=list[i]; //定义一个临时值 存储其中一个值
list[j]=list[j+1];//把后面的值赋给前面元素
list[j+1]=temp;//把temp赋值给数组后面的元素
}
}
}
foreach (var item in list)
{
Console.WriteLine(item+"------");
}
选择排序
ArrayList list = new ArrayList() {1,2,9,7,10,89,88 };
选择排序:每一轮找出最值的索引值,根据索引值再进行交换位置,所以交换的次数比冒泡排序的次数少,找出最值 把最值放在已经排序的末尾
for (int i = 0; i < list.Count-1; i++)
{
int minIndex = i;//每一轮循环的,把i当成最小值的索引值
for (int j =i+1; j<list.Count;j++)//list[i]
{
if (Convert.ToInt16( list[j]) < (Convert.ToInt16(list[minIndex])) )//取出最小值:list[minIndex],如果其中的一个元素比最小值还小,这时候list[j]最小值,记录j的索引值
{
minIndex = j;
}
}
//在内循环外部交换位置
if (i!=minIndex)//如果找到最小的和初始化的赋值的最小的不一样进行交换
{
list[minIndex]和list[i]进行交换位置
int temp = Convert.ToInt16(list[i]);
list[i] = list[minIndex];//最小值赋值给当前遍历的元素,已经排序的末尾
list[minIndex] = temp;
}
}
Console.WriteLine(string.Join(",",list.ToArray()));//join()把参数2的数组用参数1的符号进行拼接成一个字符串