排序(冒泡、选择、快速)
稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面;
不稳定:如果a原本在b的前面,而a=b,排序之后a可能会出现在b的后面;
内排序:所有排序操作都在内存中完成;
外排序:由于数据太大,因此把数据放在磁盘中,而排序通过磁盘和内存的数据传输才能进行;
时间复杂度: 一个算法执行所耗费的时间。
空间复杂度:运行完一个程序所需内存的大小。
排序
int a[] = {10,9,8,7,6,5,4,3,2,1}; int count = sizeof(a)/sizeof(int);
选择排序
for (int i = 0; i < count; i++) { int minIndex = i;//从第一个位置开始 for (int j =i+1 ; j <count; j++) { if (a[minIndex] > a[j]) { minIndex = j; // 找到剩余数中最小数的索引 } } // 交换 int temp = a[i]; a[i] = a[minIndex]; a[minIndex] = temp; }
冒泡排序
for (int i = 0; i < count; i++) { for (int j = 0; j < count-1-i; j++) { if (a[j]>a[j+1]) { int temp = a[j]; a[j] = a[j+1]; a[j+1] = temp; } } }
快速排序
void swap(int arr[], int low, int high) { if (low == high) { return; } int temp; temp = arr[low]; arr[low] = arr[high]; arr[high] = temp; } int findPartition(int arr[], int low, int high){ int base = arr[low]; while (low<high) { while (low<high && arr[high]>=base) { high--; } swap(arr, low, high); while (low<high && arr[low]<=base) { low++; } swap(arr, low, high); } return low; } void QS(int arr[], int low, int high) { if (low<high) { int base = findPartition(arr,low,high); QS(arr, low, base-1); QS(arr, base+1, high); } }
相关推荐
randy0 2020-11-17
lixiaotao 2020-10-07
美丽的泡沫 2020-09-08
nongfusanquan0 2020-08-18
hang0 2020-08-16
earthhouge 2020-08-15
算法改变人生 2020-07-28
troysps 2020-07-19
Broadview 2020-07-19
chenfei0 2020-07-18
风吹夏天 2020-07-07
yangjingdong00 2020-07-05
数据与算法之美 2020-07-05
shawsun 2020-07-04
数据与算法之美 2020-07-04
要知道时间复杂度只是描述一个增长趋势,复杂度为O的排序算法执行时间不一定比复杂度为O长,因为在计算O时省略了系数、常数、低阶。实际上,在对小规模数据进行排序时,n2的值实际比 knlogn+c还要小。
Evankaka 2020-07-04
田有朋 2020-06-28