氣泡排序基本思想:兩兩比較待排序的數,發現反序時交換,直到沒有反序為止。
public
static
void bubblesort(int
r) }
if(noswap)
}}快速排序
基本思想:在待排序數列中任選出乙個數作為基準,用這個基準將數列劃分為左右兩個子區,使得左子區的數都不大於基準數,而右子區的數都不小於基準數,稱為完成第一次劃分。如果左子區或右子區不為空,則對它進行同樣的劃分,直至為空為止。
public
static
void quicksort(int n,int left,int
right)
}//劃分public
static
int partition(int r, int left,int
right)
if (i while ((r[i] <= temp) && (i if (i}
//定位基準數
r[i] =temp;
return
i;
}直接選擇排序
基本思想:每次從無序陣列中選出乙個最小的出來,放到已排好序的陣列的最後。
public
static
void selectsort(int
r) }
//交換r[i]和r[index]
if (index !=i)
}
}插入排序
基本思想:首先將陣列的第乙個數sortarray[
0]看成是有序的,然後從第二個元素開始和它前面的元素進行比較,如果比前面的某乙個數大,就交換。由於前面的元素是有序的,所以就使有序元素的個數逐漸增大,直到等於n。
public
void sort(int
sortarray)
sortarray[j + 1] = key; //
插入到j的後面
} }
}希爾排序
基本思想:通過乙個逐漸減小的增量使乙個陣列逐漸趨近於有序從而達到排序的目的。
public
void sortshell(int
list)
list[j-1]=t;
} }
}堆排序
基本思想:記錄區的分為無序區和有序區前後兩部分;用無序區的數建大根堆,得到的根(最大的數)和無序區的最後乙個數交換,也就是將該根歸入有序區的最前端;如此重複下去,直至有序區擴充套件至整個記錄區。
堆排序步驟:
第一步,根據初始輸入資料,利用堆的調整演算法形成初始堆。
第二步,通過一系列的記錄交換和重新調整堆進行排序。
最大堆的向下調整演算法:
呼叫了o(n)次adjust()演算法,堆排序的時間複雜性為o(nlog2n)。
該演算法的附加儲存主要是執行記錄交換時所用的乙個臨時記錄。
因此,該演算法的空間複雜性為o(1)。
堆排序是乙個不穩定的排序方法。
#include
void swap(int &x, int &y)
void adjust(int *a, int parent, int
high)
if (r<=high && a[r]>a[flag])
if (flag !=parent)
} void heapsort(int *a, int
n)
for (i=n-1; i>=0; i--)
}void output(int *a, int
n) printf("\n
");}int
main()
;
int n = 8;
output(a, n);
heapsort(a, n);
output(a, n);
return0;
} /*49 38 65 97 76 13 27 49
13 27 38 49 49 65 76 97
*/
基本排序排序演算法
時空複雜度 氣泡排序 時間o n 2 額外空間o 1 插入排序 時間o n 2 額外空間o 1 選擇排序 時間o n 2 額外空間o 1 基數排序 時間o k n k logn max 額外空間o n 臨時儲存 o b 記數,b為基的大小 記數排序 時間o n k 額外空間o k 希爾排序 時間o ...
基本排序排序演算法
時空複雜度 氣泡排序 時間o n 2 額外空間o 1 插入排序 時間o n 2 額外空間o 1 選擇排序 時間o n 2 額外空間o 1 基數排序 時間o k n k logn max 額外空間o n 臨時儲存 o b 記數,b為基的大小 記數排序 時間o n k 額外空間o k 希爾排序 時間o ...
C日記 基本的排序演算法
語法是語言的特色,而演算法卻是靈魂 演算法不分語言 入門的演算法要數排序演算法 今天的演算法講解將以c語言為例子將以下幾個排序演算法 1.桶排序 2.插入排序 3.氣泡排序 4.快速排序 首先給大家介紹乙個最簡單粗暴的排序演算法 桶排序要先知道要排序的數的範圍 然後要這麼多的桶去裝這些可能出現數的次...