排序算法
- 冒泡排序
- 选择排序
两层循环,内层循环每次选择最小(大)的数放在这次循环的开头,从而完成数据的排序
时间复杂度:O(n^2),空间复杂度:O(1)
代码:
void selectSort(int arr[], int length) {
int min_index;
for (int i = 0; i < length - 1; i++) {
min_index = i;
for (int j = i + 1; j < length; j++) {
if (arr[min_index] > arr[j]) {
min_index = j;
}
}
if (min_index != i) {
int temp = arr[i];
arr[i] = arr[min_index];
arr[min_index] = temp;
}
}
}
- 快速排序
思想:(待续)
代码:
#include<stdio.h>
//找到索引
int getIndex(int arr[],int low,int high);
//排序
void sort(int arr[],int low,int high);
int main() {
int arr[] = { 67,45,23,56,78,34,90,45 };
sort(arr, 0, 7);
for (int i = 0; i < 8; i++) {
printf("%d,", arr[i]);
}
printf("\n");
return 0;
}
int getIndex(int arr[], int low, int high) {
int key = arr[low];
while (low < high) {
while (low < high&&arr[high] >= key) {
high--;
}
if (low < high) {
arr[low] = arr[high];
}
while (low < high&&arr[low] <= key) {
low++;
}
if (low < high) {
arr[high] = arr[low];
}
}
arr[low] = key;
return low;
}
void sort(int arr[],int low,int high) {
if (low < high) {
int index = getIndex(arr, low, high);
sort(arr, low, index - 1);
sort(arr, index + 1, high);
}
}
- 归并排序
class Sort {
public static void main(String[] args) {
int[] arr = {14, 12, 15, 13, 11, 16, 9};
mergeSort(arr, 0, arr.length - 1);
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i]);
if (i < arr.length - 1) {
System.out.print(",");
}
}
}
private static void mergeSort(int[] arr, int start, int end) {
if (start == end) {
return;
}
int length = end - start;
int middle = start + length / 2;
int start2 = middle + 1;
//对前半段进行归并排序
mergeSort(arr, start, middle);
//对后半段半段进行归并排序
mergeSort(arr, start2, end);
//对排好序的两段进行合并
int[] aux = new int[length + 1];
int p1 = start;
int p2 = start2;
int p3 = -1;
while (p1 <= middle || p2 <= end) {
p3++;
if (p1 <= middle && p2 > end) {
aux[p3] = arr[p1];
p1++;
continue;
}
if (p1 > middle && p2 <= end) {
aux[p3] = arr[p2];
p2++;
continue;
}
if (arr[p1] <= arr[p2]) {
aux[p3] = arr[p1];
p1++;
} else {
aux[p3] = arr[p2];
p2++;
}
}
//合并之后复制到原来的数组
p1 = start;
for (int i = 0; i < length + 1; i++) {
arr[p1] = aux[i];
p1++;
}
}
}