折半查詢的思想及原始碼 常用排序與查詢演算法

2021-10-16 08:18:47 字數 1736 閱讀 6876

選擇排序(selection sort)是一種簡單直觀的排序演算法。它的工作原理是:第一次從待排序的資料元素中選出最小(或最大)的乙個元素,存放在序列的起始位置,然後再從剩餘的未排序元素中尋找到最小(大)元素,然後放到已排序的序列的末尾。以此類推,直到全部待排序的資料元素的個數為零。選擇排序是不穩定的排序方法。

void selectsort(int r,int n)

r[high+1]=r[0];}}

氣泡排序(bubble sort),是一種電腦科學領域的較簡單的排序演算法。它重複地走訪過要排序的元素列,依次比較兩個相鄰的元素,如果順序(如從大到小、首字母從z到a)錯誤就把他們交換過來。走訪元素的工作是重複地進行直到沒有相鄰元素需要交換,也就是說該元素列已經排序完成。這個演算法的名字由來是因為越小的元素會經由交換慢慢「浮」到數列的頂端(公升序或降序排列),就如同碳酸飲料中二氧化碳的氣泡最終會上浮到頂端一樣,故名「氣泡排序」。

void bubblesort(int r,int n)}}

}

void shellsort(int r,int n)

a[s]=rc;//插入

}void heapsort(int a,int n)

for(i=n;i>=0;i--)

}

基數排序(radix sort)屬於「分配式排序」(distribution sort),又稱「桶子法」(bucket sort)或bin sort,顧名思義,它是透過鍵值的部份資訊,將要排序的元素分配至某些「桶」中,藉以達到排序的作用,基數排序法是屬於穩定性的排序,其時間複雜度為o (nlog(r)m),其中r為所採取的基數,而m為堆數,在某些時候,基數排序法的效率高於其它的穩定性排序法。

//獲取數字的位數

int getlooptimes(int num)

return count;

}//查詢陣列中的最大數

int findmaxnum(int *p, int n)

}return max;

}//將數字分配到各自的桶中,然後按照桶的順序輸出排序結果

void sortsingle(int *p, int n, int loop);

//求桶的index的除數

//如798個位桶index=(798/1)%10=8

//十位桶index=(798/10)%10=9

//百位桶index=(798/100)%10=7

//tempnum為上式中的1、10、100

int tempnum = (int)pow(10, loop - 1);

int i, j;

for(i = 0; i < n; i++)}}

//將桶中的數,倒回到原有陣列中

int k = 0;

for(int i = 0; i < 10; i++)}}

}void bucketsort(int *p, int n)

}

在常規無序陣列中,設陣列項個數為n,則乙個陣列項平均查詢長度為n/2。極端情況下,查詢資料項在陣列最後,則需要n步才能找到。

int findlinear(int* p,int n,int k)else else }}

}

折半查詢的思想及原始碼 常用排序與查詢演算法

選擇排序 selection sort 是一種簡單直觀的排序演算法。它的工作原理是 第一次從待排序的資料元素中選出最小 或最大 的乙個元素,存放在序列的起始位置,然後再從剩餘的未排序元素中尋找到最小 大 元素,然後放到已排序的序列的末尾。以此類推,直到全部待排序的資料元素的個數為零。選擇排序是不穩定...

折半查詢思想及實戰程式設計

1.折半查詢要求是陣列是有序為前提 如果不是有序的不能使用 2.提及查詢存在兩種情況,要麼資料存不存在要麼存在下標是多少 下面講解折半查詢的思想 首先定義乙個有序陣列 int array 10 1 10一共有10個資料,將這10個數進行編號,從0開始編號,即0 9 令left 0,right 9,m...

C語言實現選擇 插入 氣泡排序的思想及原始碼

在資料結構的書中肯定有一章的內容是實現排序,不同的排序方法適用的場景不同,時間複雜度也不同,在本篇部落格中寫到了三種最基本的排序,另外,希爾排序,快速排序分別是插入和氣泡排序的衍生,故熟悉基本的排序思想變得尤為重要,在此附上三種基本排序的原始碼 include include include 定義交...