您的位置:首页 > 编程语言 > C语言/C++

快速排序-(交换排序)

2017-08-21 23:10 190 查看
思想:

图片过程



例子:32,12,7,78,23,45

1)首先找一个值作为轴,一般就选数组的第一个值(arr[0]中的值)key=32

2)第一步从数组最后一个值向前遍历找比key小的值(right指向的值23)找到后与数组前面的值交换(left指的32交换)

3)第二步就是反过来从左边找比key大的值(left指向的值78)找到后与数组后面的值交换(right指的23交换)

4)left与right位置重合后不用交换将key的值赋在pos位置

现在数组中情况是:“23,12,7” 32 “78,45”以32为分界又有两组无序数


5)现在就是用函数的递归调用又同上面的思想一样将23,12,7和78,45两组数据进行排序

代码如下:

#include <stdio.h>
void Quick_sort(int arr[], int left, int right)
{
int i, j, key, m;
if (left < right)
{
i = left;
j = right;
key = arr[i];
while (i<j&&arr[j]>key)//在数组右边找到比key大的值
j--;
if (i < j)//将右边比key大的值arr[j]与arr[i]交换
{
m = arr[i];
arr[i] = arr[j];
arr[j] = m;
i++;
}
while (i < j&&arr[i] <= key)//在数组左边找到比key小的值
i++;
if (i < j)//将左边比key小的值arr[j]与arr[i]交换
{
m = arr[j];
arr[j] = arr[i];
arr[i] = m;
j--;
}
arr[i] = key;
Quick_sort(arr, 0, i - 1);
Quick_sort(arr, i + 1, right);
}
}

int main()
{
int i;
int arr[6] = { 32,12,7,78,23,45};
Quick_sort(arr, 0, 5);//因为数组的第五个单元就是第6个数啦
for (i = 0; i < 6; i++)
printf("%d ", arr[i]);
printf("\n");
return 0;
}


运行截图:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c语言