快速排序法又叫折半法

快速排序法

  • 快速排序法是冒泡法一种改进。
  • 它是通过一趟的比较,把将要排序的数据分割成独立的两部分,其中一部分的所有数据都要比另一组的数据都要小。
  • 整个排序可用递归进行。
 1 #include<stdio.h>
 2 
 3 //快速排序法
 4 void quick_sort(int a[],int end,int start);
 5 int main()
 6 {
 7     int i;
 8     int s[6];
 9     printf("please enter five numbers:
");
10     for(i=1;i<6;i++)
11     {
12         scanf("%d",&s[i]);
13     }
14 
15     quick_sort(s,5,1);
16 
17     printf("after number:
");
18     for(i=1;i<6;i++)
19     {
20         printf("%4d",s[i]);
21     }
22     printf("
");
23 }
24 
25 void quick_sort(int a[],int end,int start)
26 {
27     int i,j;
28     i=start;
29     j=end;
30     
31 
32     a[0]=a[i];
33     while(i<j)
34     {
35 
36         while(a[j]>=a[0]  && j>i)
37         {
38             j--;
39         }
40         if(i<j)
41         {
42             a[i]=a[j];
43             i++;
44         }
45         while(a[i]<=a[0]  &&  i<j)
46         {
47             i++;
48         }
49         if(i<j)
50         {
51             a[j]=a[i];
52             j--;
53         }
54     }
55     a[j]=a[0];
56     if(i<end)
57         quick_sort(a,end,i+1);
58     if(i>start)
59         quick_sort(a,i-1,start);
60 
61 
62 }

快速排序法细节较多比较容易错。

大体的思想就是:选取第一个元素为基准,和之后每一个元素比较,小的放前面,然后和之前的元素比较。之后得到两个无序的小数列,和大数列,然后使用递归 。

下面尝试不适用递归的算法

目前不会 哈哈哈

原文地址:https://www.cnblogs.com/xiaochige/p/6005252.html