排序算法

来源:互联网 发布:网络问政 编辑:程序博客网 时间:2024/05/18 18:14

一、直接插入排序:

思路:无序队列逐步向有序序列插入元素。

  public static void InsertSortMethod(List<int> list) {            for (int i = 1; i < list.Count; i++){  //第一个元素不用动了,后面的元素一个一个的去找自己的位置                if (list[i] < list[i - 1])         //因为前面的都是排好序的,你一开始都比有序的最大的大,那就不要凑热闹了,呆在自己位置吧                {                    int temp = list[i];            //要找前面的位置,自己原来的位置可能不保,先找个临时位置暂避一下。                    int j = 0;                    for (j = i - 1; j >= 0&&temp<list[j]; --j)                    {                                                   list[j + 1] = list[j]; //只有有比你大的,人家就升一级挪个窝,有下一个来和你比较,啥时候出现了比你小的那个,那上一个人的位置就是你的                                            }                    list[j + 1] = temp;                }            }                           }

时间复杂度:O(n)~O(n*n)    空间复杂度:O(1)     稳定的排序算法

 

---------------------------------------------------------------------------------------------------------

二、简单选择排序

思路:

依次从待排序列里找到最小的,放到排好的后面

public static void SelectSortMethod(List<int> list) {            int temp;            for (int i = 0; i < list.Count-1; i++) {   //要排序的趟数,第一个位置到倒数第二个位置排好后,排序就确定了 (Count-1)趟                                                       //i的值还表示找到的最小数存放的位置                for (int j = i+1; j < list.Count; j++) {  //j=i+1                    if (list[j] < list[i])                    {                                //找到小的就换位置,这样一遍遍历,最小的值落到了i的位置                        temp = list[j];                        list[j] = list[i];                        list[i] = temp;                    }                                }                        }                }

 

上面算法,性能有可以提升的空间,在内层循环中,不用每次判断都交换,只要找到最小元素的索引就行了,下面是改造后的算法:

        public static void SelectSortMethod2(List<int> list) {            int temp = 0;            int lowindex = 0;            for (int i = 0; i < list.Count - 1; i++) {                lowindex = i;                for (int j = i + 1; j < list.Count; j++) {                    if (list[j] < list[lowindex]) {                        lowindex = j;                                       }                                }                temp = list[lowindex];                list[lowindex] = list[i];                list[i] = temp;                       }                                                }


时间复杂度:O(n*n)   空间复杂度:O(1)   稳定的排序算法

 

 


 

 

 

原创粉丝点击