- MT5(C++)软件编程十大排序算法 - 冒泡排序算法 (bubble Sort)
- MT5(C++)软件编程十大排序算法 - 选择排序算法 (select Sort)
- MT5(C++)软件编程十大排序算法 - 插入排序算法 (insert Sort)
- MT5(C++)软件编程十大排序算法 - 快速排序算法 (quick Sort)
- MT5(C++)软件编程十大排序算法 - 希尔排序算法 (shell Sort)
- MT5(C++)软件编程十大排序算法 - 堆排序算法 (heap Sort)
- MT5(C++)软件编程十大排序算法 - 归并排序算法 (merge Sort)
- MT5(C++)软件编程十大排序算法 - 计数排序算法 (counting Sort)
- MT5(C++)软件编程十大排序算法 - 桶排序算法 (bucket Sort)
- MT5(C++)软件编程十大排序算法 - 基数排序算法 (radix Sort)
- 选择排序算法
当前元素和剩下的无序列表中的极限值进行位置交换
arr: 需要排序的数组
seq: 排序的方向, true 为升序, false为降序
template <typename T>
void selectSort(T & arr[],const bool seq=true)
{
if(typename(arr) == "int" || typename(arr) == "double")
{
int size = ArraySize(arr);
if(seq)
for(int i=0; i<size - 1; i++)
{
int insertIndex = i + 1;
int j = i + 1;
while (j < size - 1)
{
if(arr[insertIndex] > arr[j + 1])
{
insertIndex = j + 1;
}
j++;
}
if(arr[i] > arr[insertIndex]) swap(arr[i], arr[insertIndex]
}
else
for(int i=0; i<size - 1; i++)
{
int insertIndex = i + 1;
int j = i + 1;
while (j < size - 1)
{
if(arr[insertIndex] < arr[j + 1])
{
insertIndex = j + 1;
}
j++;
}
if(arr[i] < arr[insertIndex]) swap(arr[i], arr[insertIndex]
}
}
}
2. 双向选择排序算法
当前元素和剩下的无序列表中的极限值进行位置交换
arr: 需要排序的数组
seq: 排序的方向, true 为升序, false为降序
template <typename T>
void selectSortOP(T & arr[],const bool seq=true)
{
if(typename(arr) == "int" || typename(arr) == "double")
{
int size = ArraySize(arr);
int max,min;
if(seq)
{
int low = 0; int high = size - 1;
while(low <= high)
{
max = low; min = low;
for(int i = low + 1; i <= high; i++)
{
if(arr[i] < arr[min]) min = i;
if(arr[i] > arr[max]) max = i;
}
swap(arr[low], arr[min]);
if(max == low)max = min;
swap(arr[high],arr[max]);
high--;
low++;
}
}
else
{
int low = 0; int high = size - 1;
while(low <= high)
{
max = low; min = low;
for(int i = low + 1; i <= high; i++)
{
if(arr[i] > arr[min]) min = i;
if(arr[i] < arr[max]) max = i;
}
swap(arr[low], arr[min]);
if(max == low)max = min;
swap(arr[high],arr[max]);
high--;
low++;
}
}
}
}