氣泡排序基本思想:兩兩比較待排序的數,發現反序時交換,直到沒有反序為止。
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
*/
資料結構 基本排序演算法
直接插入排序 c 實現 簡單選擇排序 c 實現 氣泡排序 c 實現 基本排序演算法.cpp 定義控制台應用程式的入口點。include stdafx.h includeusing namespace std void directinsertsorting int data,int size 直接插...
資料結構 c 排序演算法
排序是將乙個記錄的任意序列,重新排列成乙個按關鍵字有序的序列 按非遞減或非遞增 排序演算法按排序過程中依據的不同原則可以大致分為五類 插入排序 交換排序 選擇排序 歸併排序 基數排序。下面程式均使無序序列排序成非遞減序列。資料結構使用順序表,並初始化8個元素 49,38,65,97,76,13,27...
資料結構中的排序演算法
排序分為記憶體排序和外部排序,內部排序在記憶體中進行,外部排序因資料量較大,在外存中進行。一般我們常說的八大排序為內部排序。複雜度為o nlog2n 的排序演算法 快速排序 堆排序和歸併排序。1.1 演算法思想 每趟將乙個待排序的元素作為關鍵字,按照其關鍵字值的大小插入到已經排好的部分序列的適當位置...