选择排序&插入排序&希尔排序

来源:互联网 发布:放置江湖安卓修改数据 编辑:程序博客网 时间:2024/05/19 19:41

一 选择排序思路

在一趟排序中,每次选择一个最小的值,然后在一趟比较完成后,在进行交换。

二选择排序代码实现


/*************************************************Function:       SelectSoftDescription:    选择排序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:       InsertSoftDescription:    插入排序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)

六 希尔排序代码

/*************************************************
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);}



0 0
原创粉丝点击