数据结构之排序(未完,待续)

include

include

include

include

pragma warning(disable:4996)

冒泡排序,稳定的排序
void bubblesort(int* arr, int len)//稳定的排序算法

{
assert(arr&&len > 0);
int i = 0;
int j = 0;
int temp = 0;
for (i = 0; i < len - 1; i++)
{
int flag = 1;
for (j = 0; j < len - 1-i;j++)
if (arr[j]>arr[j + 1])
{
flag = 0;
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
if (1 == flag)
{
return;
}

}

}

void InsertSort(int* arr, int len)//直接插入排序,稳定的排序。
{
assert(arr&&len > 0);
int i = 0;
int temp = 0;
int end = 0;
for (i = 0; i < len-1; i++)//控制排序的次数。
{
end = i;
while(end >= 0)
{
if (arr[end]>arr[end + 1])//按从小到大排,即就是升序。这里不存在开辟空间的问题。
{
temp = arr[end];
arr[end] = arr[end + 1];
arr[end + 1] = temp;
end–;
}
else//结束即就是退出当前循环。
{
break;
}
}

}

}
希尔排序其实是直接插入排序的优化,因为它可以减少排序的次数
void ShellInsert(int* arr, int len)//希尔排序,不稳定的排序
{
assert(arr&&len > 0);
int gap = len/ 3 + 1;
int temp = 0;
while (gap > 1)
{
for (int i = 0; i < len - gap; ++i)
{
int end = i;
while (end >= 0)//其实突然觉得有时候也没有自己想的那么难。
{
if (arr[end]>arr[end + gap])
{
temp = arr[end];
arr[end] = arr[end + 1];
arr[end + 1] = temp;
end–;
end -= gap;

            }
            else
            {
                break;
            }
        }
    }
    gap = gap / 3 + 1;

}
InsertSort(arr, len);

}

int main()
{
int arr[] = { 4, 3, 2, 1 };
int i = 0;
int len = sizeof(arr) / sizeof(arr[0]);
//bubblesort(arr, len);
//insertsort(arr, len);
ShellInsert(arr, len);
for (i = 0; i < len; i++)
{
printf(“%d”, arr[i]);
}
system(“pause”);
return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_40797414/article/details/81457218