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

2021-06-22 11:43:14 字數 1134 閱讀 3595

設待排序陣列為a[n]

(1)直接插入排序

思想:將陣列a[n]分為乙個有序區a[1]...a[i] 和乙個無序區a[i+1]....a[n-1],每一次將a[i+1]插入有序區,形成乙個新的有序區,如此反覆。

**如下:

#include "stdafx.h"

#include using namespace std;

typedef int type;

//直接插入排序

void insertsort(type a,int n)

a[j]=temp;

}}

(2)直接選擇排序

思想: 將陣列a[n]分為乙個有序區a[1]...a[i] 和乙個無序區a[i+1]....a[n-1],每次將無序區最大或最小的值找出,並置於有序區尾部。

**如下:

//直接選擇排序

void choosesort(type a,int n)

while((a[i](5)堆排序

思想: 首先建造乙個初始大堆;其次,每一趟排序都是將當前無序區的堆頂記錄a[0]和區間最後乙個記錄交換,將新的無序區調整為堆。

//堆排序

//生成大根堆

//調整以spoint為根結點的二叉樹為大堆 n為陣列大小

void swap(type *a,type *b)

void createheep(type a,int spoint, int n)

for(i=(n-1);i>=1;i--) //堆排序

}

(6)歸併排序

思想: 分治法,先講乙個待排序陣列遞迴分割槽,直至分為2個有序陣列為止(陣列中只有乙個元素時,則肯定有序);  而後將2個排好序的陣列進行合併.

**如下:

//歸併排序

void mergesort(type *a,int left,int mid,int right)

{ int i=left;

int j=mid+1;

int k=0;

type *temp=new type[right-left+1];

while((i<=mid)&&(j<=right))

{ if(a[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...