<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    莊周夢(mèng)蝶

    生活、程序、未來(lái)
       :: 首頁(yè) ::  ::  :: 聚合  :: 管理
    一。直接插入排序
    1。直接插入排序:直接插入排序是一種簡(jiǎn)單的排序方法,它的基本思想是將待排序的記錄按照其值的大小插入到已排好序的有序表的適當(dāng)位置,直到全部插入完為止。舉個(gè)整型的排序例子
    2。直接插入排序的偽代碼:
    insertionsort(data[])
    ???
    for?i=1?to?data.length-1
    ???????tmp
    =data[i];
    ???????將所有大于tmp的元素data[j]向后移動(dòng)一位;
    ???????將tmp放在正確的位置上;

    3.簡(jiǎn)單例子,以整型為例。
    A)ruby語(yǔ)言實(shí)現(xiàn):
    ?
    def?insertion_sort(a)
    ??i
    =1
    ??
    while?i<a.length
    ????tmp
    =a[i]
    ????j
    =i
    ????
    while?j>0
    ??????break?
    if?tmp>a[j-1]
    ??????a[j]
    =a[j-1]
    ??????j
    -=1
    ????end
    ????a[j]
    =tmp
    ????i
    +=1
    ??end
    end???????
    a
    =[10,2,3]
    insertion_sort(a)
    a
    .each{|i?|?print?i.to_s+"?"}

    B)java語(yǔ)言實(shí)現(xiàn):
    package?com.sohu.blog.denns_zane.sort;

    public?class?InsertSort{
    ????
    public?static?void?main(String?args[]){
    ????????
    int?[]data={12,2,3,56,90};
    ????????insertsort(data);
    ????????
    for(int?i=0;i<data.length;i++){
    ????????????System.out.print(data[i]
    +"?");
    ????????}

    ????}

    ????
    public?static?void?insertsort(int?[]data){
    ????????
    for(int?i=1,j;i<data.length;i++){
    ????????????
    int?tmp=data[i];
    ????????????
    for(j=i;j>0&&tmp<data[j-1];j--)
    ???????????????data[j]
    =data[j-1];
    ????????????data[j]
    =tmp;???
    ????????}

    ????}

    }


    5。算法復(fù)雜度:
    最好情況:進(jìn)行n-1次比較和2(n-1)次移動(dòng),盡管他們其實(shí)都是多余的,復(fù)雜度O(n)
    最壞情況:具體計(jì)算略,O(n*n)
    平均情況:O(n*n),也就是接近最壞情況,在平均情況下,數(shù)組大小翻倍,它的排序工作將是原來(lái)的4倍。

    二。選擇排序
    1。算法描述:選擇算法試圖先查找一個(gè)放錯(cuò)位置的元素并將它放到最終位置上,以此來(lái)局部化數(shù)組元素的交換。選擇值最小的元素并將它和第一個(gè)位置上的元素交換。在第i步中,查找data[i],...,data[n-1]中的最小元素,并將它和data[i]進(jìn)行交換。重復(fù)此過(guò)程,直到所有的元素都放入正確的位置為止。

    2。偽代碼描述:
    selectionsort(data[])
    ?????
    for?i=0?to?data.length-2
    ????????從data[i],,data[n
    -1]中選取最小的元素
    ????????將它和data[i]交換
    ?
    3。實(shí)現(xiàn),以整型數(shù)組為例:
    1)ruby語(yǔ)言實(shí)現(xiàn):

    def?selection_sort(a)
    ??least
    =0
    ??
    for?i?in?(0..(a.length-2))
    ????j
    =i+1
    ????least
    =i
    ????
    while?j<a.length
    ??????
    if?a[j]<a[least]
    ????????least
    =j
    ??????end
    ??????j
    +=1??
    ????end
    ????a[least]
    ,a[i]=a[i],a[least]?unless?least==i?#交換
    ??end
    end
    a
    =[12,4,34,23,45,35]
    selection_sort(a)
    a
    .each{|i|?print?i.to_s+"?"}

    代碼很好理解,不做解釋。

    2)java語(yǔ)言實(shí)現(xiàn):
    package?com.sohu.blog.denns_zane.sort;

    public?class?SelectionSort{
    ????public?static?
    int[]?selection_sort(int?[]?data){
    ????????
    int?i,j,least=0;
    ????????
    for(i=0;i<data.length-1;i++){
    ????????
    ??????????
    for(j=i+1,least=i;j<data.length;j++)
    ????????????
    if?(data[j]<=data[least])
    ????????????????????least
    =j;
    ??????????
    if?(least!=i)
    ????????????swap(data
    ,least,i);??//????data[i]oí×?D??a??
    ????????}????
    ????????
    return?data;???
    ????}
    ????public?static?void?swap(
    int[]data,int?least,int?i){
    ????????
    int?tmp=data[least];
    ????????data[least]
    =data[i];
    ????????data[i]
    =tmp;
    ????}
    ????public?static?void?main(String?args[]){
    ????????
    int[]?t={10,29,12,23,56};
    ????????selection_sort(t);
    ????????
    for(int?i:t){
    ????????????
    System.out.print(i+"?");
    ????????}?
    ????}
    }

    4.算法效率:
    任何情況下,都需要進(jìn)行n*(n-1)/2次比較,也就是O(n*n)的復(fù)雜度
    最好情況:數(shù)組已經(jīng)排序,不需要交換任何元素
    最壞情況:最大元素在第一個(gè)位置而其他元素有序時(shí),需要進(jìn)行3*(n-1)次交換,即O(n),也是很好的結(jié)果

    三。冒泡排序
    1。算法偽代碼描述:
    bubblesort(data[])
    ??
    for?i=0?to?data.length-2
    ?????
    for?j=data.length-1?downto?i+1
    ?????????如果順序錯(cuò)誤,就交換j和j
    -1位置上的元素

    2。實(shí)現(xiàn):
    1)ruby語(yǔ)言實(shí)現(xiàn):
    def?bubble_sort(data)
    ??
    for?i?in?(0..(data.length-2))
    ?????j
    =data.length-1
    ?????
    while?j>i
    ????????
    if?data[j]<data[j-1]
    ???????????data[j]
    ,data[j-1]=data[j-1],data[j]???#交換
    ????????end
    ????????j
    -=1
    ?????end
    ??end
    end
    a
    =[12,3,56,7,89,87]
    bubble_sort(a)
    a
    .each{|i|?print?i.to_s+"?"}

    2)java語(yǔ)言實(shí)現(xiàn):
    package?com.sohu.blog.denns_zane.sort;

    public?class?BubbleSort{
    ????
    public?static?void?bubble_sort(int?[]?data){
    ????????
    for(int?i=0;i<data.length-1;i++)
    ????????????
    for(int?j=data.length-1;j>i;j--)
    ??????????????
    if(data[j]<data[j-1])
    ????????????????swap(data,j,j
    -1);
    ????????
    ????}

    ????
    public?static?void?swap(int[]data,int?least,int?i){
    ????????
    int?tmp=data[least];
    ????????data[least]
    =data[i];
    ????????data[i]
    =tmp;
    ????}

    ????
    public?static?void?main(String?args[]){
    ????????
    int[]?t={10,29,12,23,56};
    ????????bubble_sort(t);
    ????????
    for(int?i:t){
    ????????????System.out.print(i
    +"?");
    ????????}
    ?
    ????}

    }


    3。算法效率:
    冒泡排序的比較次數(shù)近似是插入排序的兩倍,和選擇排序相同;移動(dòng)次數(shù)和插入排序相同,是選擇排序的n倍。可以說(shuō),插入排序比冒泡排序快兩倍。
    主站蜘蛛池模板: 亚洲线精品一区二区三区 | 亚洲AV无码一区东京热久久| 亚洲国模精品一区| 一本久久综合亚洲鲁鲁五月天 | 久久aⅴ免费观看| 亚洲乱亚洲乱淫久久| 亚洲国产精品一区二区久久| 亚洲VA中文字幕无码毛片| 亚洲AV无码一区二区三区DV| 亚洲AV永久无码区成人网站| 亚洲av永久无码精品网站| 亚洲综合激情视频| 精品亚洲成A人无码成A在线观看 | 久久精品国产亚洲精品| 亚洲中文字幕第一页在线| 成人免费一区二区无码视频| 国产成人免费爽爽爽视频| 日韩免费视频播放| 亚洲成a人片在线观看久| 自拍偷自拍亚洲精品第1页| 亚洲AV永久无码精品| 亚洲综合一区二区| 亚洲一本一道一区二区三区| 久久亚洲精品无码av| 又大又硬又粗又黄的视频免费看| 丝瓜app免费下载网址进入ios| 免费国产在线视频| 国产成人免费午夜在线观看| 免费看无码自慰一区二区| 亚洲国产精品国产自在在线| 亚洲精品成人网站在线观看| 亚洲一区二区中文| 亚洲午夜精品一区二区麻豆| 男女作爱免费网站| 亚洲一区免费观看| 大地资源二在线观看免费高清| 亚洲av手机在线观看| 亚洲国产成人高清在线观看| 国产成+人+综合+亚洲专| 污视频网站在线观看免费| 免费视频精品一区二区三区|