本帖最后由 马超(Andy) 于 2014-7-26 17:33 编辑
面向过程方面个人觉得排序这部分有必要多看看,练习完视频内演示的两种排序方法又学习了下 直接插入排序 还有其他什么基础排序 大家补充下
学习第三种排序算法--- 直接插入排序 假设要求让无序数组进行升序排列
分析:
1.取无序数组中的第一个元素,并把此元素当做有序数组。
2.取第二个元素,与第一个元素进行比较,若第二个元素比第一个元素大则不动,若二个元素比第一个元素小则把第一个元素移到第二个元素位置,第二个元素插入到第一个元素位置。(注意,这里是插入,并不是交换位置。)
3.再取第三个元素,与其前一个元素(第二个元素)进行比较,若小于第二个元素,则再让第三个元素与第一个元素进行比较,若大于或者等于第一个元素,则把此元素插入到第一个元素后,同时把第三个元素向后移动。
4.以此类推,轮到每个元素进行排序时,都要让它与其前边的第一个元素向前依次进行比较,直到第一个元素或者找到一个元素小于或等于其本身,然后把此元素插入到那个元素后边,其他元素依次向后移动。
5.如此反复,直到最后一个元素插入完成则完成数组的排序。
附图:
java代码实现如下: 假设要求升序排列
//定义一个插入排序方法
public static void insertSort(int[] arr)
{
int temp = 0; //定义一个变量,用来存储交换过程要交换的值
int pos = 0; //定义一个变量,充当数组内指针,用来确定要比较的元素
for (int i = 1; i < arr.length; i++) //确定要进行插入排序的元素,因为第一个元素可以看做为有序,故从第二个元素开始排序
{
temp = arr; //先取出要进行插入排序的元素值,等待做比较以及插入处理
pos = i; //取要比较元素的位置(下标)作为比较的起始点。
while (pos > 0 && temp < arr[pos-1])//设置循环结束点,当被比较元素下标小于0或者要进行插入的元素大于或等于时停止其前边的一个元素时停止
{
arr[pos] = arr[pos-1]; //若以上条件结束,则其前边的元素以此向前位移
pos--; //通过改变指针值,来改变要比较的数组元素
}
arr[pos] = temp; //当循环结束,意味着已经找到要插入的位置,利用中间值把要插入的值插入在此
}
}
|
|