选择排序法:每次遍历整个数组,选出其中最小值。如果数组长度为n,则需要(n-1)+(n-2)+...+2+1次操作,则用大O表示法表示应该为O(n*n/2),但是大O表示法省略诸如1/2这样的常数,因此该方法的大O表示为O(n^2)。
Python代码:
>>> def findSmallest(arr):
smallest = arr[0]
smallest_index = 0
for i in range(1, len(arr)):
if arr[i] < smallest:
smallest = arr[i]
smallest_index = i
return smallest_index
>>> def selectionSort(arr):
newArr = []
for i in range(len(arr)):
smallest = findSmallest(arr)
newArr.append(arr.pop(smallest))
return newArr
测试:
>>> selectionSort([5,3,6,2,10])
[2, 3, 5, 6, 10]
>>>
C#代码:
namespace Algorithms
{
public static class SelectionSort
{
public static List<double> Selection_Sort(List<double> list)
{
List<double> newList = new List<double>();
double smallest;
int count = list.Count;
for (int i = 0; i < count; i++)
{
smallest = list[FindSmallest(list)];
list.Remove(smallest);
newList.Add(smallest);
}
return newList;
}
private static int FindSmallest(List<double> list)
{
double smallest = list[0];
int smallest_index = 0;
for (int i = 1; i < list.Count; i++)
{
if(list[i] < smallest)
{
smallest = list[i];
smallest_index = i;
}
}
return smallest_index;
}
}
}
快速排序法:请先熟悉“递归”的相关知识。https://www.cnblogs.com/larissa-0464/p/10630300.html
分而治之(divide and conquer, D&C)的思想:1.找出简单的基线条件;2.确定如何缩小问题的规模,使其符合基线条件。
那么将D&C思想应用于排序任务中,其思路应如下:
基线条件就是只有一个元素的数组,这样的数组顺序就是自己。在数组中任取一个元素作为基准值,那么该数组将会被划分为三部分
小于基准值的子数组 + 基准值 + 大于基准值的子数组
这样就会不断地缩小数组的规模,直到只剩一个元素为止。
Python代码:
>>> def quicksort(arr):
if len(arr) < 2:
return arr
else:
pivot = arr[0]
less = [i for i in arr[1:] if i <= pivot]
greater = [i for i in arr[1:] if i > pivot]
return quicksort(less) + [pivot] + quicksort(greater)
>>> arr = [3,5,1,9,7]
>>> quicksort(arr)
[1, 3, 5, 7, 9]
>>>
C#代码:
namespace Algorithms
{
public static class QuickSort
{
public static List<double> Quick_Sort(List<double> array)
{
if (array.Count < 2)
return array;
else
{
double pivot = array[0];
List<double> less = new List<double>();
List<double> greater = new List<double>();
for (int i = 1; i < array.Count; i++)
{
if (array[i] <= pivot)
less.Add(array[i]);
else
greater.Add(array[i]);
}
return Quick_Sort(less).Union(new List<double>() { pivot }).Union(Quick_Sort(greater)).ToList();
}
}
}
}
其实,排序的方法已经包含在各种语言中了,比如Python和C#都是使用Sort方法,就可以对一个数组进行从小到大的排序了。不过了解算法的本质应该也不是什么坏事吧。
来源:oschina
链接:https://my.oschina.net/u/4345852/blog/3592822