Apexクラスでこんな感じで書いてあげると、

public ApexPages.StandardSetController ssc { get; set; }

/**
 * コンストラクタ
 */
public クラス名(ApexPages.StandardController controller) {
    ssc = new ApexPages.StandardSetController (Database.getQueryLocator([SELECT Id, Name FROM Account ORDER BY Name]));
    ssc.setPageSize(20);
}


/**
 * 最初へ
 */
public void first() {
    ssc.first();
}

/**
 * 最後へ
 */
public void last() {
    ssc.last();
}

/**
 * 次へ
 */
public void next() {
    ssc.next();
}

/**
 * 前へ
 */
public void previous() {
    ssc.previous();
}

Visualforceでページネーションが利用できるようです。

<apex:commandLink action="{!first}" rendered="{!ssc.HasPrevious}" value="最初へ" />
<apex:commandLink action="{!previous}" rendered="{!ssc.HasPrevious}" value="前へ" />
<apex:commandLink action="{!next}" rendered="{!ssc.HasNext}" value="次へ" />
<apex:commandLink action="{!last}" rendered="{!ssc.HasNext}" value="最後へ" />

そんでもって、ページ番号とかはこんな感じ。

{!ssc.PageNumber} / {!CEILING(ssc.ResultSize / ssc.PageSize)} ページです。