以下是几种简单排序算法的代码实现,涵盖插入排序、选择排序、冒泡排序和快速排序:
一、插入排序(Insertion Sort)
原理 :通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。
C++实现 :
void insertionSort(int *a, int n) {
int t;
for(int i=1; i<n; i++) {
t = a[i];
j = i-1;
while(j>=0 && t<a[j]) {
a[j+1] = a[j];
j--;
}
a[j+1] = t;
cout << 'J'<< j << endl;
}
}
二、选择排序(Selection Sort)
原理 :每次从未排序部分选择最小(或最大)元素,放到已排序序列末尾。
C++实现 :
void selectionSort(int *a, int n) {
int i, j, minIndex, temp;
for(i=0; i<n-1; i++) {
minIndex = i;
for(j=i+1; j<n; j++) {
if(a[j] < a[minIndex]) minIndex = j;
}
if(minIndex != i) {
temp = a[i];
a[i] = a[minIndex];
a[minIndex] = temp;
}
}
}
三、冒泡排序(Bubble Sort)
原理 :重复交换相邻未按顺序排列的元素,将最大(或最小)元素逐步“冒泡”到末尾。
C++实现 :
void bubbleSort(int *a, int n) {
for(int i=0; i<n-1; i++) {
bool swapped = false;
for(int j=0; j<n-i-1; j++) {
if(a[j] > a[j+1]) {
swap(a[j], a[j+1]);
swapped = true;
}
}
if(!swapped) break; // 优化:若无交换则提前结束
}
}
四、快速排序(Quick Sort)
原理 :通过基准元素将数组分为左右两部分,递归排序子序列。
C++实现 :
void quickSort(int *a, int low, int high) {
if(low < high) {
int pivot = a[low];
int i = low, j = high;
while(i < j) {
while(i < j && a[j] >= pivot) j--;
a[i] = a[j];
while(i < j && a[i] < pivot) i++;
a[j] = a[i];
}
a[i] = pivot;
quickSort(a, low, i-1);
quickSort(a, i+1, high);
}
}
说明
-
插入排序 和 选择排序 适用于小规模数据,时间复杂度为O(n²)。
-
冒泡排序 通过优化提前终止可提升效率,最坏情况仍为O(n²)。