一 选择排序思路
在一趟排序中,每次选择一个最小的值,然后在一趟比较完成后,在进行交换。
二选择排序代码实现
/*************************************************
Function: SelectSoft
Description: 选择排序
Input;
k:待排序的数组 length:数组的长度
Output: 无
Return: 无
Others: 无
*************************************************/
#include "stdafx.h"
#include"SelectSoft.h"
#include"bubbleSoft.h"
void SelectSoft(int k[], int length)
{
int min;
for (int i = 0; i < length-1; ++i)
{
min = i;
for (int j = i+1; j < length;++j)
{
if (k[j] < k[min])
{
min = j;
}
}
if (min != i)
{
Swap(k, i, min);
}
}
}
三 插入排序思路
直接插入排序是默认前面已经排好序了,然后将新的数组从后插入到排好序的相应位置,然后插入完成后就会变成一个排好序的数列
四 直接插入排序代码
/*************************************************
Function: InsertSoft
Description: 插入排序
Input;
k:待排序的数组 length:数组的长度
Output: 无
Return: 无
Others: 一般而言 在排序的个数少于7的时候效率很好
*************************************************/
void InsertSoft(int k[], int length)
{
for (int i = 1; i < length; ++i)
{
for (int j = i; j > 0; --j)
{
//将待排数据插入到合适的位置
if (k[j] < k[j - 1])
{
Swap(k,j,j-1);
}
}
}
}
五 希尔排序思路
思路:希尔排序是将其分为n个组,并对其n个组进行插入排序,首先间距为length/n 下一趟排序在length/n/n ...
直到增量为0为止 时间复杂度低于 O(n^2)
直到增量为0为止 时间复杂度低于 O(n^2)
六 希尔排序代码
/*************************************************
Function: SellSoft
Description: 希尔排序
Input;
k:待排序的数组 length:数组的长度 gap:希尔排序的间隔
Output: 无
Return: 无
Others: 是直接插入排序算法的一种更高效的改进版本
*************************************************/
Function: SellSoft
Description: 希尔排序
Input;
k:待排序的数组 length:数组的长度 gap:希尔排序的间隔
Output: 无
Return: 无
Others: 是直接插入排序算法的一种更高效的改进版本
*************************************************/
void SellSoft(int k[], int length, int n)
{
int gap = length;
do
{
gap = gap / n;
for (int i = gap; i < length; ++i)
{
for (int j = i; j> gap-1; j = j - gap)
{
if (k[j]<k[j-gap])
{
Swap(k,j,j-gap);
}
}
}
} while (gap>1);
}