排序演算法的研究

2021-07-15 18:02:18 字數 2153 閱讀 8864

排序演算法的研究

2006-03-24 23:38:31

分類: 專案管理

對於排序的演算法我想先做一點簡單的介紹,也是給這篇文章理乙個提綱。 

我將按照演算法的複雜度,從簡單到難來分析演算法。 

第一部分是簡單排序演算法,後面你將看到他們的共同點是演算法複雜度為o(n*n)(因為沒有 

使用word,所以無法打出上標和下標)。 

第二部分是高階排序演算法,複雜度為o(log2(n))。這裡我們只介紹一種演算法。另外還有幾種 

演算法因為涉及樹與堆的概念,所以這裡不於討論。 

第三部分類似動腦筋。這裡的兩種演算法並不是最好的(甚至有最慢的),但是演算法本身比較 

奇特,值得參考(程式設計的角度)。同時也可以讓我們從另外的角度來認識這個問題。 

第四部分是我送給大家的乙個餐後的甜點——乙個基於模板的通用快速排序。由於是模板函式 

可以對任何資料型別排序(抱歉,裡面使用了一些論壇專家的呢稱)。

現在,讓我們開始吧:

一、簡單排序演算法 

由於程式比較簡單,所以沒有加什麼注釋。所有的程式都給出了完整的執行**,並在我的vc環境 

下執行通過。因為沒有涉及mfc和windows的內容,所以在borland c++的平台上應該也不會有什麼 

問題的。在**的後面給出了執行過程示意,希望對理解有幫助。

1.冒泡法:

這是最原始,也是眾所周知的最慢的演算法了。他的名字的由來因為它的工作看來象是冒泡: 

#include

void bubblesort(int* pdata,int count) 

}while(i<=j);//如果兩邊掃瞄的下標交錯,就停止(完成一次)

//當左邊部分有值(lefti),遞迴右半邊 

if(right>i) 

run(pdata,i,right); 

}

void quicksort(int* pdata,int count) 

void main() 

const char* getdata(); 

//這裡過載了操作符: 

cmydata& operator =(cmydata &srcdata); 

bool operator

bool operator >(cmydata& data );

private: 

char* m_strdatamember; 

int m_idatasize; 

}; 

mydata.cpp檔案 

cmydata::cmydata(): 

m_iindex(0), 

m_idatasize(0), 

m_strdatamember(null) 

cmydata::~cmydata() 

cmydata::cmydata(int index,char* strdata): 

m_iindex(index), 

m_idatasize(0), 

m_strdatamember(null) 

cmydata& cmydata::operator =(cmydata &srcdata) 

bool cmydata::operator

///

// 

//主程式部分 

#include 

#include "mydata.h"

template 

void run(t* pdata,int left,int right) 

}while(i<=j);//如果兩邊掃瞄的下標交錯,就停止(完成一次)

//當左邊部分有值(lefti),遞迴右半邊 

if(right>i) 

run(pdata,i,right); 

}

template 

void quicksort(t* pdata,int count) 

void main() 

quicksort(data,8); 

for (int i=0;i<8;i++) 

cout<

演算法研究之快速排序

快速排序 quicksort 是對氣泡排序的一種改進。由c.a.r.hoare在1962年提出。它的基本思想是 通過一趟排序將要排序的資料分割成獨立的兩部分,其中一部分的所有資料都比另外一部分的所有資料都要小,然後再按此方法對這兩部分資料分別進行快速排序,整個排序過程可以遞迴進行,以此達到整個資料變...

洗牌演算法的研究

在紙牌遊戲中,有個發牌過程,發牌就是把紙牌序列打亂發給遊戲者。要保證發牌是隨機的,這也符合現實中玩牌的過程,洗牌 洗牌 即產生指定資料的隨機序列,將牌序打亂。方法一 思路 將n個數依次放到隨機的位置。關鍵是每次找乙個隨機的位置。1 設定目標陣列為空 置0 1 每次產生乙個0 n 1的隨機數,看這個位...

union find演算法的研究

三種union find演算法的效能特點演算法 建構函式 union find quick find演算法nn 1quick union演算法 n樹的高度 樹的高度 加權quick union演算法 nlgn lgnpublic intfind int p public void union int...