C语言快速正序排序并返回索引
一、冒泡排序(耗时m)
void bubble_sort(float *a, int *b, int n)
{
int i, j;
float k;
for (i = 0; i < n - 1; i++)
{
for (j = 0; j < n - i; j++)
{
if (a[j + 1] < a[j])
{
k = a[j + 1];
a[j + 1] = a[j];
a[j] = k;
k = b[j + 1];
b[j + 1] = b[j];
b[j] = k;
}
}
}
}
int main()
{
float array[] = {2, 5, 7, 3, -1, 1, 4};
int n = sizeof array /sizeof array[0];
int index_area[10] = {0};
for (int i = 0; i < n; i++)
{
index_area[i] = i;
}
bubble_sort(array, index_area, n);
}
二、快速排序(耗时m/10)
void quick_sort(float *a, int *b, int n)
{
int i, j, p, tmp, tmp2;
if (n < 2) return;
p = a[n / 2]; // Get the middle element as pivot ..
for (i = 0, j = n - 1;; i++, j--) {
while (a[i] < p)
i++;
while (p < a[j])
j--;
if (i >= j)
break;
tmp = a[i]; a[i] = a[j]; a[j] = tmp; //swap both ..
tmp2 = b[i]; b[i] = b[j]; b[j] = tmp2;
}
quick_sort(a, b, i);
quick_sort(a + i, b + i, n - i);
}
int main()
{
float array[] = {2, 5, 7, 3, -1, 1, 4};
int n = sizeof array /sizeof array[0];
int index_area[10] = {0};
for (int i = 0; i < n; i++)
{
index_area[i] = i;
}
quick_sort(array, index_area, n);
}
利用快速排序的方法,速度提升了10倍。
快速排序的原理:C语言实现快速排序