1.快速排序
using namespace std;
#include<iostream>
#include<math.h>
const int N = 100010;
int n;
int a[N];
void quick_sort(int a[], int left, int right)
{
if (left >= right)
{
return;
}
int x = a[left + right>>1], i = left-1, j = right+1;
//相当于除以2但比除以2运算时间短
while (i < j)
{
do i++; while (a[i] < x);
do j--; while (a[j] > x);
if (i < j)//交换
{
swap(a[i], a[j]);
}
}
quick_sort(a, left, j);
quick_sort(a, j + 1, right);
}
int main()
{
cin >> n;
for (int i = 0; i < n; i++)
{
cin >> a[i];
}
quick_sort(a, 0, n - 1);
for (int i = 0; i < n; i++)
{
cout << a[i] << " ";
}
return 0;
}
结论:
1.原来使用的是while (a[i] < x) { i++; } while (a[j] > x) { j--; }
提交后运行超时,发现
do while运行时间比while快
2.当向函数中传入数组时不可以用引用,可以在声明函数前声明数组,这样做可以传址。
3.学到新的用法
int x = a[left + right>>1]
//相当于除以2但比除以2运算时间短
这样可以减少运行时间