氣泡排序,插入排序,選擇排序和快速排序 C語言

2021-06-22 10:33:44 字數 1809 閱讀 3371

這篇博文主要用於自己學習的文章梳理,方便以後回憶。

first,氣泡排序, 演算法的時間複雜度是n*n  ,在資料較多的時候,和快速排序比較執行時間,簡直慢的掉渣,

氣泡排序的思想,主要是相鄰兩個元素比較,如果前乙個元素比後乙個元素大,則進行交換,否則繼續後移,知道一次迴圈結束,此時最後乙個元素是序列中最大的元素。

每乙個趟將乙個元素像冒泡一樣冒出,進行n-1此迴圈後,序列有序。

氣泡排序主要兩個for迴圈的邊界。

void bubble(int *a,int len)

} }}

second,插入排序。

插入排序的主要思想是假設初始序列只有乙個元素,這個元素肯定有序,每次向序列裡插入乙個元素,找到元素合適的位置,然後進行插入。

插入排序的核心部分就是找到該元素合適的位置。

可以將帶插入的元素和 有序序列最後比較,如果比最後乙個元素大,直接插入最後乙個元素後面,如果比最後乙個元素小,則將最後乙個元素後移,知道找到合適的位置停止。

最後將待插入的元素插入到適當的位置上。

void insert(int *a,int len)

else //大於當前元素 停止內迴圈

}a[j+1]=temp;

}}

third,選擇排序,正如這種排序的名字一樣,每次遍歷非有序的序列,找出最小元素,放入到合適的位置上。

初始假設第乙個元素有效,然後與第乙個元素後面的每個元素比較,每找到比此元素小的元素,進行交換,一趟迴圈後,初始元素肯定是最小的。

然後依次類推,排序後面的元素。

void select(int *a,int len)

} }}

fourth,快速排序, 乙個優秀的排序,還是有點回答不上來當時導師問的那個問題,為什麼快速排序比別的排序要快?

只能說一下演算法的大概思想了,讓導師失望了,找到乙個pivot,然後通過比較後,使pivot前面的元素比它小,後面的元素比它大, 然後對前半段和後半段遞迴的呼叫程式,

int  quicksort(int *a,int low,int high)

a[i] = a[j];

while((a[i] <= temp) && (i < j))

a[j]= a[i];

} a[i] = temp;

// quicksort(a,low,i-1);

// quicksort(a,j+1,high); //遞迴呼叫函式

} return i; //分割點 i=j;

}

最後 。通過快速排序 ,產生了乙個元素序列的劃分,想一下,如果在倒數第十個元素前面的都比它小,後面的都比他大,則後面的十個元素就是最大的元素,則不需要每次遍歷整個序列找出最大元素輸出。

下面的**是找到列印最大k個元素的的起點。

int find_top(int *a,int len,int count)

else

}return part;

}

最後放上測試**:

#include "superman.h"

int main(int argc,char *argv)

{ int i,n=1;

int part;

int test[size];

//int *test=(int *)calloc(size,sizeof(int));

//srand(time(null));

for(i=0;i

氣泡排序 選擇排序 插入排序 快速排序

include 氣泡排序,思想 從最末位開始 往前一位一位比較,比前一位小的話,就交換位置 兩個for,第乙個for迴圈用於記錄已排序的位置,第二個for迴圈用於已排序位置到結束位置之間的氣泡排序 void popsort int p int n 選擇排序,由前往後選擇最小的數。一輪比較完後,將最小...

氣泡排序 選擇排序 插入排序 快速排序

氣泡排序 元素兩兩比較,大的往後放,經過一輪比較後,那麼最大的元素就會出現在最後面。public static void main string args for int j 0 j arr i 1 system.out.println arrays.tostring arr 每次拿乙個元素,跟他後...

氣泡排序 選擇排序 快速排序 插入排序

排序只對一維資料有意義.兩層迴圈,第一層是遍歷每乙個元素.第二層迴圈,讓兩兩之間進行比較交換.時間複雜度 o n 2 空間複雜度 o 1 穩定性 穩定的 def buble sort arr for i in range len arr 1 for j in range len arr i 1 if...