线性数据结构算法

拟墨画扇 提交于 2020-02-04 14:28:45

     数据结构计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法索引技术有关。

        图形结构                                                       树形结构                                           线性结构                                集合结构

 

1.冒泡排序

在进行冒泡法排序(升序)时,将第一个数与后继的数进行比较,如果顺序则继续第二个数与后继的数进行比较;如果逆序则交换位置,继续和后继的数进行比较,完成第一趟冒泡排序。同理,直到数组有序。

如果经过一趟冒泡排序不发生数据交换说明数组原本有序。

最好时间复杂度:O(n)

平均时间复杂度:O(n^2)

最坏时间复杂度: O(n^2)

空间复杂度: O(1)

代码示例

  /**
     * 冒泡排序
     *
     * @param array
     * @return 相邻数据对比,交互位置
     */
    public static int[] bubblingSort(int[] array) {
        //从后一位开始循环对比,直到循环完。
        for (int i = array.length - 1; i > 0; i--) {
            boolean flag = true;
            //把最大的筛选到最后
            for (int j = 0; j < array.length - 1; j++) {
                if (array[j] > array[j + 1]) {
                    int temp = array[j];
                    array[j] = array[j + 1];
                    array[j + 1] = temp;
                    flag = false;
                }
            }
            //优化减少循环的次数
            if (flag) {
                break;
            }
        }
        return array;
    }


     public static void main(String[] args) {
            int[] array = new int[]{3, 2, 5, 8, 1, 9, 4, 6, 7};
            bubblingSort(array);
            for (int i : array) {
                System.out.print(i + " ");
            }
        }

排序结果:

第1次排序:[2,3,5,1,8,4,6,7,9]
第2次排序:[2,3,1,5,4,6,7,8,9]
第3次排序:[2,1,3,4,5,6,7,8,9]
第4次排序:[1,2,3,4,5,6,7,8,9]
第5次排序:[1,2,3,4,5,6,7,8,9]
1 2 3 4 5 6 7 8 9 

 

2、 选择排序:把第一个数与他后面的数进行比较,如果顺序则继续与后面比较,如果逆序则两数交换位置,继续将第一个数与交换位置后的数进行比较,这样就完成了第一轮排序。同理将第二位与其后的数比较,直到数组有序为止。

最好时间复杂度:O(n)

平均时间复杂度:O(n^2)

最坏时间复杂度: O(n^2)

空间复杂度:O(1)

代码示例

 /***
     * 选择排序
     * @param array
     * @return
     *
     */
    public static int[] selectSort(int[] array) {
        for (int i = 0; i <array.length-1 ; i++) {
            int index = i;
            for (int j = i+1; j < array.length ; j++) {
                if (array[j] < array[index]) {
                    index =j;//如果有一个小于固定位置的数,就对换位置。
                }
            }
            //如果已经是最小的,就不需要交换
            if(index!=i){
                int temp =array[index];
                array[index] =array[i];
                array[i] = temp;
            }
        }
        return array;
    }

     public static void main(String[] args) {
            int[] array = new int[]{3, 2, 5, 8, 1, 9, 4, 6, 7};
           selectSort(array);
            for (int i : array) {
                System.out.print(i + " ");
            }
        }

排序结果:

第0次排序:[1,2,5,8,3,9,4,6,7]
第1次排序:[1,2,5,8,3,9,4,6,7]
第2次排序:[1,2,3,8,5,9,4,6,7]
第3次排序:[1,2,3,4,5,9,8,6,7]
第4次排序:[1,2,3,4,5,9,8,6,7]
第5次排序:[1,2,3,4,5,6,8,9,7]
第6次排序:[1,2,3,4,5,6,7,9,8]
第7次排序:[1,2,3,4,5,6,7,8,9]
1 2 3 4 5 6 7 8 9 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!