使用lua语言--排序

来源:互联网 发布:vb key value 编辑:程序博客网 时间:2024/06/05 15:52

排序(Sort)

1.排序是将一段记录按照从大到小或者从小到大排列的排序,记录指的是要操作的数据元素。
2.要排序的那项 我们成为排序项,比如学生的c语言成绩,也可以成为关键码(keyword),关键码分为主关键码和次关键码。
3.主关键码,排序的序列唯一,次关键码表示序列是不唯一的,因为存在相同的元素,就有可能不唯一,还可以成为不稳定的。

排序的方法

1.直接插入排序

思路:有一个数是42的时候,我们遍历索引1-7的数,如果找到一个比42小的数,放在42的前面。第二轮17 首先20 17 42 , 第二次17 20 42 有点冒泡排序的意思。
table={2,5,1,4,7,3}for i=2,#table dolocal ivalue=table[i]local isInsert=false --isInsert=true 表示第一个位置插入好了for j=i-1,1,-1 do--如果存在一个i <j 的数才插入放在 j的前面if(table[j]>ivalue) then --此时还要把这个数放在j-1的位置table[j+1]=table[j]elsetable[j+1]=ivalue --不移动isInsert=truebreakendendif isInsert==false thentable[1]=ivalueendend

冒泡排序(Bubble Sort)

经常用到出现在各大排序中的方法,如果从小到大排序,第一轮 保证最大的数 冒到上面,明白交换几轮
table={2,5,1,4,3};for i=1,#table dofor j=1,#table-i doif(table[j]>=table[j+1]) thenlocal temp=table[j]table[j]=table[j+1]table[j+1]=tempendendend

简单选择排序(Simple Select Sort)

思路:第一个数是最小,第二数次小,第一轮方法是从后面的数找到比索引0位置小的数交换位置
 

table={2,5,1,4,7,3}for i=1,#table dolocal minNUm=table[i]for j=i+1,#table doif(table[j]<minNUm) thentable[i]=table[j]table[j]=minNUm--此时要更新一下minNumminNUm=table[i]endendend

快速排序

采用一种分治法,经常使用各大小的面试当中的方法。


思路:
1.设置1个小兵i和一个小兵j,i从数组首部出发,j从尾部出发,每次走一步。i++,j++,j要比i先走。
2.设置基准数 最开始为索引0,即6.当i走到比6大的位置停下,j走到比6小的位置停下,然后交换位置

3.一次类推他们始终会碰上,此时将3和基准数6兑换,6左边都小于6,右边都大于6对吧。然后31254 和 9 710 8在排序

4.难点是对于 9 7 10 8这种9 为基准数,其实是9 7 8 10然后将 8设置成基点。  


不知道如何用lua实现重载 ,用c#写一个 快速排序吧
  static void QuickSort(int[] a, int left, int right)        {            int i, j, temp, swap;            i = left;            j = right;            if (left > right) return;            temp = a[left];                        while (i != j)            {                while (a[j] >= temp && j > i)                {                    j--;                }                while (a[i]<=temp&&j>i)                {                    i++;                }                if (i < j)                {                    swap = a[i];                    a[i] = a[j];                    a[j] = swap;                }            }            a[left] = a[i];            a[i] = temp;            QuickSort(a,left,i-1);            QuickSort(a,i+1,right);        }



原创粉丝点击