交换排序

 

冒泡排序

基本思想:在要排序的一组数中,对当前还未排好序的范围内的全部数,自上而下对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒。

void bubbleSort(int a[],int n)
{
    for(int i=0;i<n-1;i++)
        for(int j=0;j<n-1-i;j++)
    {
        if(a[j]>a[j+1])
        {
            int tmp=a[j];
            a[j]=a[j+1];
            a[j+1]=tmp;
        }
    }
}

 

快速排序的基本思想:

(1)选择一个基准元素,通常选第一个或者最后一个元素。

(2)通过一趟排序之后将待排序的记录分割成独立的两部分,其中一部分的记录的元素值均比基准元素值小,另一部分记录的元素均比基准元素值大。

(3)此时基准元素在其排好序的正确位置

(4)然后分别对这两部分的记录用同样的方法继续进行排序,直到整个序列有序,快排完毕。

 

具体代码如下:

 1 //快速排序
 2 
 3 void print(int a[],int n)
 4 {
 5     for(int j=0;j<n;j++)
 6         cout<<a[j]<<" ";
 7 
 8     cout<<endl;
 9 }
10 
11 void swap_int(int *a,int *b)
12 {
13     int tmp=*a;
14     *a=*b;
15     *b=tmp;
16 }
17 
18 int sort_partition(int a[],int low,int high)
19 {
20     int privotkey=a[low];
21     while(low<high)
22     {
23         while(low<high && a[high]>=privotkey) --high;
24         swap_int(&a[low],&a[high]);
25         while(low<high && a[low]<=privotkey) ++low;
26         swap_int(&a[low],&a[high]);
27     }
28     print(a,10);
29     return low;
30 }
31 
32 //采用递归的方式快速排序
33 void quickSort(int a[],int low,int high)
34 {
35     if(low<high)
36     {
37         int privotLoc=sort_partition(a,low,high);  //将表一分为二
38         quickSort(a,low,privotLoc-1);
39         quickSort(a,privotLoc+1,high);
40     }
41 }
42 
43 int main()
44 {
45     int a[10]={3,1,5,7,2,4,9,6,10,8};
46     quickSort(a,0,9);
47     print(a,10);
48 }

 

posted @ 2016-01-20 20:25  尾巴草  阅读(155)  评论(0编辑  收藏  举报