版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zxt_1/article/details/85018563
1.bubbleSort
//如果左边的数字比右边小,就交换
template <typename T>
void bubbleSort(T arr[], int n)
{
bool flag;
do
{
flag = false;
for (int i = 0; i < n-1; ++i) {
if(arr[i] > arr[i+1])
{
swap(arr[i], arr[i+1]);
flag = true;
}
}
n--;
}while(flag);
}
2.selectSort
template <typename T>
void selectSort(T arr[], int n)
{
for (int i = 0; i < n; ++i)
{
int minIndex = i;
int j;
for (j=i+1; j<n; j++)
{
if(arr[j]<arr[minIndex])
minIndex = j;
}
swap(arr[minIndex], arr[i]);
}
}
3.insertSort
//适用场景:数据近乎有序
template <typename T>
void insertSort(T arr[], int n)
{
for(int i=0; i<n; i++)
{
T tmp = arr[i];
int j;
for (j=i; j>0; j--)
{
if(arr[j-1] > tmp)
arr[j] = arr[j-1];
else
break;
}
arr[j] = tmp;
}
}
拓展:shellSort
template <typename T>
void shellSort(T arr[], int n)
{
int h = 1;
while(h < n/3)
h = 3*h+1;
while(h >= 1)
{
for (int i = h; i < n; ++i) {
T tmp = arr[i];
int j;
for (j=i; j>=h; j=j-h) {
if(arr[j-h] > tmp)
arr[j] = arr[j-h];
else
break;
}
arr[j] = tmp;
}
h /= 3;
}
}