Ytl's Java Blog

          厚積而薄發(fā)---每一天都是一個全新的開始

          Bubble Sort

          Bubble sort is a simple and well-known sorting algorithm. It is used in practice once in a blue moon and its main application is to make an introduction to the sorting algorithms. Bubble sort belongs to O(n2) sorting algorithms, which makes it quite inefficient for sorting large data volumes. Bubble sort is stable and adaptive.

          Algorithm

          1. Compare each pair of adjacent elements from the beginning of an array and, if they are in reversed order, swap them.
          2. If at least one swap has been done, repeat step 1.

          You can imagine that on every step big bubbles float to the surface and stay there. At the step, when no bubble moves, sorting stops. Let us see an example of sorting an array to make the idea of bubble sort clearer.

          Example. Sort {5, 1, 12, -5, 16} using bubble sort.

          Bubble sort example

          Complexity analysis

          Average and worst case complexity of bubble sort is O(n2). Also, it makes O(n2) swaps in the worst case. Bubble sort is adaptive. It means that for almost sorted array it gives O(n) estimation. Avoid implementations, which don't check if the array is already sorted on every step (any swaps made). This check is necessary, in order to preserve adaptive property.

          Turtles and rabbits

          One more problem of bubble sort is that its running time badly depends on the initial order of the elements. Big elements (rabbits) go up fast, while small ones (turtles) go down very slow. This problem is solved in the Cocktail sort.

          Turtle example. Thought, array {2, 3, 4, 5, 1} is almost sorted, it takes O(n2) iterations to sort an array. Element {1} is a turtle.

          Turtle example

          Rabbit example. Array {6, 1, 2, 3, 4, 5} is almost sorted too, but it takes O(n) iterations to sort it. Element {6} is a rabbit. This example demonstrates adaptive property of the bubble sort.

          Rabbit example

          Code snippets

          There are several ways to implement the bubble sort. Notice, that "swaps" check is absolutely necessary, in order to preserve adaptive property.

          Java

          public void bubbleSort(int[] arr) {

                boolean swapped = true;

                int j = 0;

                int tmp;

                while (swapped) {

                      swapped = false;

                      j++;

                     for (int i = 0; i < arr.length - j; i++) {                               

                            if (arr[i] > arr[i + 1]) {                          

                                  tmp = arr[i];

                                  arr[i] = arr[i + 1];

                                  arr[i + 1] = tmp;

                                  swapped = true;

                            }

                      }                

                }

          }

          Python

          def bubbleSort(L) :

              swapped = True;

              while swapped:

                  swapped = False

                  for i in range(len(L)-1):

                      if L[i]>L[i+1]:

                          temp = L[i]

                          L[i] = L[i+1]

                          L[i+1] = temp

                          swapped = True

          posted @ 2011-05-06 16:03 ytl| 編輯 收藏

               摘要: 關(guān)于二分查找的原理互聯(lián)網(wǎng)上相關(guān)的文章很多,我就不重復(fù)了,但網(wǎng)絡(luò)的文章大部分講述的二分查找都是其中的核心部分,是不完備的和效率其實還可以提高,如取中間索引使用開始索引加上末尾索引的和除以2,這種做法在數(shù)字的長度超過整型的范圍的時候就會拋出異常,下面是我的代碼,其中可能有些地方?jīng)]考慮到或有什么不足  閱讀全文

          posted @ 2011-03-15 12:12 ytl 閱讀(2639) | 評論 (5)編輯 收藏

               摘要:   閱讀全文

          posted @ 2009-11-15 00:18 ytl 閱讀(1116) | 評論 (0)編輯 收藏

          Java處理Excel數(shù)據(jù)有很多方式,如Apache的POI或JXL等.

          我首先給出一個Excele數(shù)據(jù)的讀入的方式(使用的是jxl.jar包)

          package com.ccniit.readexcel;

          import java.io.File;
          import java.io.FileInputStream;
          import java.io.FileNotFoundException;
          import java.io.IOException;
          import java.io.InputStream;
          import java.util.ArrayList;
          import java.util.HashMap;
          import java.util.List;
          import java.util.Map;

          import jxl.Sheet;
          import jxl.Workbook;
          import jxl.read.biff.BiffException;

          public class ExcelHander {

              
          public static String[] getColName(String desc) {
                  InputStream is 
          = null;
                  String[] colNames 
          = null;
                  
          try {
                      is 
          = new FileInputStream(new File(desc));
                      Workbook wb 
          = Workbook.getWorkbook(is);
                      Sheet sheet 
          = wb.getSheet(0);
                      
          int cols = sheet.getColumns();
                      colNames 
          = new String[cols];
                      
          for (int i = 0; i < cols; i++{
                          colNames[i] 
          = sheet.getCell(i, 0).getContents();
                          
          // System.out.println("列名: " + colNames[i]);
                      }

                      is.close();
                  }
           catch (FileNotFoundException e) {
                      
          // TODO Auto-generated catch block
                      e.printStackTrace();
                  }
           catch (BiffException e) {
                      
          // TODO Auto-generated catch block
                      e.printStackTrace();
                  }
           catch (IOException e) {
                      
          // TODO Auto-generated catch block
                      e.printStackTrace();
                  }

                  
          return colNames;

              }


              
          public List<Map<String, Object>> readExcel(String desc) {
                  List
          <Map<String, Object>> datas = null;
                  
          try {
                      InputStream is 
          = new FileInputStream(new File(desc));
                      Workbook wb 
          = Workbook.getWorkbook(is);
                      
          if(wb == null){
                          
          return null;
                      }

                      Sheet sheet 
          = wb.getSheet(0);
                      
          int cols = sheet.getColumns();
                      
          int rows = sheet.getRows();
                      datas 
          = new ArrayList<Map<String, Object>>();
                      
          for (int i = 1; i < rows; i++{
                          Map
          <String, Object> data = new HashMap<String, Object>();
                          
          for (int j = 0; j < cols; j++{
                              String key 
          = sheet.getCell(j, 0).getContents();
                              
          // System.out.println("key:" + key);
                              Object value = (Object) sheet.getCell(j, i).getContents();
                              
          // System.out.println("value:" + value.toString());
                              data.put(key, value);
                          }

                          datas.add(data);
                      }

                      is.close();
                      wb.close();
                  }
           catch (FileNotFoundException e) {
                      e.printStackTrace();
                  }
           catch (BiffException e) {
                      e.printStackTrace();
                  }
           catch (IOException e) {
                      e.printStackTrace();
                  }

                  
          return datas;
              }


          }



          posted @ 2009-04-12 13:57 ytl 閱讀(427) | 評論 (0)編輯 收藏

          再見了我的 2008

          謹以此文獻給我們的2008年--

          但愿你的點點滴滴永存于我們心間....

          再見我的2008--楊天寧 

          還有一點點的時間
          讓我們用來回憶
          還有一點點的時間
          可以用來哭泣
          可以不管得到還是失去
          輕輕合上眼睛
          緊緊抱著它啊
          時間這樣飛逝
          我們就這樣長大
          我們哭著笑著唱著
          在勇敢地成長
          想想身邊每個朋友
          你們是否不再孤單害怕
          聽時間開始倒記
          這樣隨音樂大聲唱起
          再見我的2008年
          好懷念你在我的身邊
          當昨天它一點點走遠
          我知道我們不能回到從前
          再見我的2008年
          我記得你的每一個瞬間
          無論明天悲喜或是改變
          只希望我們都能快樂一點
          鐘聲它已走遠...

          2008,這一年發(fā)生了太多太多的事,或許有些事你已經(jīng)淡忘,但也有些事會長存于你的心間,難以磨滅.

          在2008年即將離我們而去之際,讓我們回首一下自己這一年所經(jīng)歷過的點點滴滴.在這一年里,我們哭過,笑過,痛苦過,掙扎過,努力過,認真過,也跌到過,爬起過,遺憾過...無論你在這一年里是達到了自己的目標,實現(xiàn)了夢想,還是犯下了不可彌補的錯誤,讓自己身邊的人受到傷害,這一切都將過去,因為 2008年在你生命中只有一次而已,而它正逐漸離我們而去...

          年初的南方大雪災(zāi)(家人因為地滑,摔傷)
          手足口病肆虐
          藏獨事件
          網(wǎng)絡(luò)開始流行全民"中國心"頭像
          全球華人開展愛國行動 堅決反對西藏獨立
          奧運火炬?zhèn)鬟f活動遭藏獨份子阻礙
          512汶川大地震 無數(shù)人在此災(zāi)難中痛失親人朋友(學(xué)校損失被迫異地復(fù)課)
          08年8月8日20點 北京奧運會開幕
          劉翔因腿傷退出比賽 成為全民討論熱點
          毒奶粉事件 使中國奶制品業(yè)受重創(chuàng)
          起于美國的金融風暴 席卷全球

          2008,是屬于中國人的奧運年.從4年前得知我們要舉辦奧運的那一刻起,到后來奧運圣火輾轉(zhuǎn)傳遞,然后到奧運會順利開幕,選手們展開精彩角逐,最后到奧運圓滿閉幕,這些都在我們心中留下一個個永生難忘的精彩瞬間 那一個個運動健兒揮灑汗水,頑強拼搏的身影也銘刻于我們心底...

          2008,也是中國多災(zāi)多難的一年.一個突如其來的大地震,讓無數(shù)的人痛失自己摯愛的親人,朋友,也失去了自己心愛的家園...跌倒了,不要緊,最后我們還是爬起來了.當?shù)弥@一噩耗時,我們?nèi)珖技娂娚斐鲎约旱脑?捐資捐物,幫災(zāi)民重建家園.這也讓我們看到了中華的希望,我們傳統(tǒng)的互助精神并沒有被遺忘.一個災(zāi)難的磨練,令世人更加清楚地認識到了這個民族的力量所在.

          ......

          對于我而言,2008也是具有里程碑式意義的一年.因為這一年我告別了自己的大學(xué)生涯,開始人生新旅程.不曉得我這個句號劃得完不完美,但是我自己無悔就夠了,畢竟我努力過了,就讓所大學(xué)以前的記憶,所有記憶都停在這一年吧,也停留在我的內(nèi)心深處...

          時間推著我們向前 我們是無法停留在原地的 只有把昨天的記憶埋于心底作養(yǎng)料 用現(xiàn)有的來播種 然后期待明天能開出絢爛的花朵...

          再見了,2008;再見了,我的大學(xué)生活,雖說是再見卻永遠不會再見,但愿我在往后十年里能有所成就,也希望09年以后,世界能繼續(xù)朝著繁榮安定的方向邁進,能順利找到工作.....

          posted @ 2008-12-25 20:09 ytl 閱讀(4938) | 評論 (7)編輯 收藏

          個人在項目開發(fā)中總結(jié)的。供大家參考

          1.頁面顯示中文時出現(xiàn)的亂碼,通常使用

          1 <%@ page contentType="text/html;charset=gb2312"%>

           

          可以達到處理亂碼的效果

          2.從請求中獲得數(shù)據(jù)是出現(xiàn)的中文亂碼處理方法有
          (1) get請求有兩種處理方法
          方法1:
          在tomcat的配置文件(conf)中的server.xml的

          1  <Connector port="8080" protocol="HTTP/1.1" 
          2                connectionTimeout="20000" 
          3                redirectPort="8443" 
          4                URIEncoding="gb2312"/>


          加入上面第4行代碼即可。
          方法2:也就是通常說的再編碼的說法,

          1<%
          2   String name=request.getParameter("name");
          3   byte []b = name.getBytes("GB2312");
          4   name=new String(b);
          5%>
          6也可簡化為:
          7<%=new String(request.getParameter().getBytes("GB2312"))
          8%>


          (2)post請求
          在jsp頁面中加入也下代碼

          1<%request.setCharacterEncoding("gb2312");%>

          需要注意的是這部分代碼要放寫在獲得請求內(nèi)容以前。

          3.以上就是JSP頁面中出現(xiàn)亂碼的方法,最后我想說的就是如何確定發(fā)送的
            請求是GET 還是POST。
          (1)一般表單(Form)提交中有method方法確定。
          (2)通過URL鏈接傳遞為GET方法提交
          (3)通過地址重寫的為GET方法提交

          謝謝閱讀

          posted @ 2008-05-08 16:54 ytl 閱讀(1175) | 評論 (3)編輯 收藏

                      我是軟件專業(yè)現(xiàn)在是大二的學(xué)生,我們已經(jīng)學(xué)了1年的Java 知識,現(xiàn)在還沒有開Java Web  我想多

          提前和多學(xué)點知識,可我有點迷惑。開始應(yīng)該還先學(xué)JSP方面的知識,學(xué)JSP 必須要學(xué)習(xí)HTML方面的知道,

          如涉及到CSS,JS.如果想把網(wǎng)站設(shè)計更美觀的還需要學(xué)習(xí)PS。當一切都好的時候,可能考慮學(xué)習(xí)框架,可現(xiàn)

          在Java框架特多,我應(yīng)該怎么選擇,那些好啊。最后學(xué)習(xí)J2EE方面東西。我在互聯(lián)網(wǎng)上看到,有點人說學(xué)習(xí)

          J2EE可無EJB,這是真的嗎??還有最后問題學(xué)了這樣一切,現(xiàn)在流行AJAX。又要學(xué)習(xí)這個知識。我想了我

          應(yīng)該從哪里開始啊。如果都學(xué)一個人精力不能有那么多啊,可要是不學(xué)那開發(fā)做出來東西在外觀或其他方面

          沒有別人好吧。希望那些高手們,幫我出個主意。。謝謝啦。。。

          posted @ 2008-01-14 19:45 ytl 閱讀(1925) | 評論 (12)編輯 收藏

          僅列出標題
          共2頁: 上一頁 1 2 
          主站蜘蛛池模板: 玉屏| 观塘区| 西乡县| 云林县| 宜城市| 平顺县| 通河县| 叶城县| 伊宁县| 伊宁市| 浪卡子县| 迁安市| 沙雅县| 永昌县| 伊宁县| 淄博市| 固镇县| 顺义区| 田阳县| 阜新市| 赞皇县| 灵山县| 库尔勒市| 卫辉市| 二手房| 顺昌县| 岫岩| 临猗县| 蕲春县| 罗田县| 绵阳市| 永平县| 海原县| 伊金霍洛旗| 开远市| 庆云县| 罗山县| 临朐县| 瓮安县| 怀宁县| 莲花县|