在此贴一下,经常用到的快速排序算法
此代码来自于别人的博客,在此贴出博客的地址:http://blog.youkuaiyun.com/morewindows/article/details/6684558
//快速排序
void quick_sort(int s[], int l, int r)
{
if (l < r)
{
//Swap(s[l], s[(l + r) / 2]); //将中间的这个数和第一个数交换 参见注1
int i = l, j = r, x = s[l];
while (i < j)
{
while(i < j && s[j] >= x) // 从右向左找第一个小于x的数
j--;
if(i < j)
s[i++] = s[j];
while(i < j && s[i] < x) // 从左向右找第一个大于等于x的数
i++;
if(i < j)
s[j--] = s[i];
}
s[i] = x;
quick_sort(s, l, i - 1); // 递归调用
quick_sort(s, i + 1, r);
}
}
下面是自己写的lua代码:
math.randomseed(os.time());
a = {};
for i=1,10 do
a[i] = math.random(100);
end
print("sorting array:...");
for i=1,10 do
print(a[i]);
end
print("sorting begins");
function quickSort(first, last)
local pivot = a[first];
local i = first;
local j = last;
if i < j then
while i < j do
while i < j and a[j] >= pivot do
j = j - 1;
end
if i < j then
a[i] = a[j]
i = i + 1;
end
while i < j and a[i] < pivot do
i = i + 1;
end
if i < j then
a[j] = a[i]
j = j - 1;
end
end
a[i] = pivot;
quickSort(first, i - 1);
quickSort(i + 1, last);
end
end
quickSort(1, 10);
for i=1,10 do
print(a[i]);
end