用歸併排序對鏈表進行排序

        當我們需要對鏈表進行排序時,由於不能對它的元素進行隨機訪問,所以更適合使用歸併排序,大名鼎鼎的快速排序用到鏈表上,效率也很低,原因還是在於不能對鏈表中的元素進行隨機訪問,同理,採用堆排序更是不可能的事情。        演算法具體實現時需要一個指向前端節點(鏈表的第一個節點,鏈表中不包含額外的一個節點來作前端節點)的指標,這是因為在演算法實現的時候,不大可能第一個節點正好就是所有元素中最小的一個,則鏈表的前端節點會改變,因此我們需要一個指向前端節點的指標來儲存不斷變化的前端節點。

java調用winrar解壓檔案[rar.bz2.zip.....]

package com.czp;import java.io.File;import java.util.Properties;public class UnRarFile {public static void main(String[] args) {UnRarFile unrar = new UnRarFile();unrar.unRarFileCurDir(new File("d:/ftpd/pm/test/*.bz2"));}/** * 解壓檔案 * * @param target

將兩個有序鏈表合并成一個有序鏈表

問題定義:        寫一個函數SortedMerge函數,該函數有兩個參數,都是遞增的鏈表,函數的功能就是合并這兩個遞增的鏈表為一個遞增的鏈表,SortedMerge的傳回值是新的鏈表。新鏈表由前兩個鏈表按元素遞增順序合并而成,也就是說它不會建立新的元素。比如:這裡有兩個鏈表,分別是list1: 5->10->15list2:

[編程珠璣讀書筆記] 插入排序

這麼簡單的插入排序,都可以最佳化,還有什麼是不可以最佳化的。最讓我驚訝的是,當多次調用一個函數的時候,函數的調用開銷是不可忽略的。正如測試結果所示:#include<stdio.h>#define MAX 1000000void swap( int *data, int i, int j){int temp = data[i]; data[i] = data[j];data[j] = temp;}//未經過最佳化的插入排序,簡單直觀void InsertSort1( int

求兩個鏈表的並集和交集

        給定2個鏈表,求這2個鏈表的並集(鏈表)和交集(鏈表)。不要求並集(鏈表)和交集(鏈表)中的元素有序。如,輸入:List1: 10->15->4->20List2: 8->4->2->10輸出:交集(鏈表):4->10並集(鏈表):2->8->20->4->15->10方法一(簡單、直觀的方法):        下面是得到2個鏈表的並集和交集的簡單演算法。        InterSection(list1,

測試管道的容量

#include <signal.h>#include <unistd.h>#include <limits.h>#include <stdio.h>#include <stdlib.h>int count;void alrm_action(int);int main(){int p[2];int pipe_size = 0;char c = 'x';static struct sigaction act;/*set up the

[編程之美]設計一個高效的資料結構,儘可能快的返回隊列中的最大值

        如題。設計一個高效的資料結構,包含MaxElement操作,快速的返回隊列中最大的元素。編程之美關於這題的解析實在是太漂亮了,因為直接求解沒有什麼好的解法,但是我們可以便於使用兩個棧來實現一個隊列,這樣就把問題轉換為如果方便的從棧中返回最大值問題。        思路如下:        在棧中維護一個最大值序列,保證MaxElement操作的時間複雜度為O(1)。虛擬碼如下:class stack {public:stack (){stackTop =

Unix編程之size_t、ssize_t

對於趕時間的朋友,只看第一段就好了。   首先,我非常肯定以及確定的告訴你ssize_t是有符號整型,在32位機器上等同與int,在64位機器上等同與long int,有沒有注意到,它和long資料類型有啥區別?其實就是一樣的。size_t 就是無符號型的ssize_t,也就是unsigned long/ unsigned int (在32位下),不同的編譯器或系統可能會有區別,主要是因為在32位機器上int和long是一樣的。在64位沒有測試,但是參見百度百科,size_t

STL中各種容器的刪除操作

在應用中,我們通常不可避免地要對容器中的某些特定元素進行刪除操作。這看起來並不是什麼困難的問題。我們先寫一個迴圈來迭代容器中的元素,如果迭代元素是要刪除的元素,則刪除之。代碼如下所示:        vector<int> intContainer;for(vector<int>::iterator is = intContainer.begin(); it != intContainer.end(); ++it){if ( *it == 25)

一道有趣的面試題——將int型數組強制轉換為char*,再求strlen,涉及大小端

寫出如下程式運行結果:#include<stdio.h>#include<string.h>int main(){int a[2000];char *p = (char*)a;for( int i = 0; i < 2000; i++)a[i] = -1 - i;printf( "%d\n", strlen(p));return 0;}請不要運行,先用草稿紙算算,能算出來不?   

memcpy 和 memmove 的區別,memcpy 和 strcpy 的區別

以下是man memcpy的結果: #include <string.h>       void *memcpy(void *dest, const void *src, size_t n);DESCRIPTION       The  memcpy()  function  copies  n bytes from memory area src to memory       area dest.  The memory areas must not overlap.  Use

MFC對話方塊畫圖

實現功能:1、在對話方塊上的一塊地區繪製彩色線條。2、視窗被覆蓋後恢複時,映像自動重繪。3、改變按鈕顏色。操作:根據嚮導建立一個對話方塊程式。在資源中添加一個靜態文字框,其ID為IDC_STATIC。在DialogXXXDlg.h 中加入如下內容      CBrush m_brush;//用於自訂色彩    CDC m_memDC;//螢幕DC相容的記憶體DC    CBitmap m_Bmp;//位元影像    CWnd* m_pDrawWnd;//用於儲存靜態文字框的對象指標    // 

[演算法導論讀書筆記]Dijkstra演算法

演算法思想:Dijkstra(迪傑斯特拉)演算法是典型的最短路徑路由演算法,用於計算一個節點到其他所有節點的最短路徑。主要特點是以起始點為中心向外層層擴充,直到擴充到終點為止。Dijkstra演算法能得出最短路徑的最優解,但由於它遍曆計算的節點很多,所以效率低。Dijkstra演算法是很有代表性的最短路演算法,在很多專業課程中都作為基本內容有詳細的介紹,如資料結構,圖論,運籌學等等。其基本思想是,設定頂點集合S並不斷地作貪心選擇來擴充這個集合。一個頂點屬於集合S若且唯若從源到該頂點的最短路徑長度

深度優先遍曆演算法的非遞迴實現

  深度優先遍曆演算法的非遞迴實現需要瞭解深度優先遍曆的執行過程,設計一個棧來類比遞迴實現中系統設定的工作棧,演算法的虛擬碼描述為:  假設圖採用鄰接矩陣作為儲存結構,具體演算法如下:   深度優先遍曆演算法的非遞迴實現需要瞭解深度優先遍曆的執行過程,設計一個棧來類比遞迴實現中系統設定的工作棧,演算法的虛擬碼描述為:   假設圖採用鄰接矩陣作為儲存結構,具體演算法如下:#include<iostream>#include <queue>using namespace

[編程珠璣讀書筆記]快速排序

一步一步最佳化的快速排序,速度比插入排序快很多,而且可以很方便的引入隨機演算法來避免最差情況。#include<iostream>#include<string.h>#include<stdio.h>#include<algorithm>#include <sys/times.h>//#include <time.h>using namespace std;#define DEBUGconst int MAX = 10000

交換整型的奇數位和偶數位

問題定義:        Write a program to swap odd and even bits in an integer with as few instructions as possible(e.g, bit 0 and bit 1 are swapped, bit 2 and bit 3 are swapped, etc)代碼如下,自己想了一個晚上,居然沒想出來,太失敗了。#include <stdio.h>int SwapOddEvenBit(int

STL——for_each的用法

描述:template <class InputIterator, class Function> Function for_each (InputIterator first, InputIterator last, Function f);Apply function to rangeApplies function f to each of the elements in the range [first,last).The behavior of this

git:備份代碼到github以及從github拷貝代碼到本地

        本著樂於分享、助人為樂、快樂自己、協助他人、全新全意為人民服務的精神寫下這篇文章。讀完這篇文章你能學到如何在linux下將本地代碼備份到github以及如何將github上感興趣的代碼clone到本地。其實關於git的入門教程網上一堆一堆的,但是都太散亂,而且大都是給有經驗的程式員看的,對於我們這種從來沒用過其他版本控制工具的學生而言,講得不夠仔細。       

近似演算法求解調度問題

        給定n個任務J1, J2,……, Jn和M台機器M1, M2……,Mm。對於每個任務Ji,其處理時間為ti > 0,而且必須由一台不間斷底處理,每台機器在一個時間段裡最多處理一個任務。並行機器調度問題就是如何將任務分配給機器,使得處理完成任務的完成時間(makespan)最短。      對於這個NP問題,沒有多項式時間的精確演算法,用近似演算法,效果好,速度快,真是難以置信啊,我剛5小時前還覺得JB近似演算法有什麼好研究的。ListScheduling(I)while

旋轉數組

問題定義:      給定一個數組data[]和一個數M,向右旋轉M位,要求時間複雜度為O(n),空間複雜度為O(1),如,char data[]="abcde", M = 2,旋轉以後data 應該為cdeab,如何高效的實現該功能?這是一個非常經典的題目,第一次自己看到可能根本想不出來,也是09年電腦研究生入學考試的演算法題,該題在《編程珠璣》和《編程之美》裡都有討論,寫這篇文章的原因是今天發現了STL對該問題的一個高效演算法。1.

總頁數: 61357 1 .... 14312 14313 14314 14315 14316 .... 61357 Go to: 前往

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.