7中排序算法

冒泡排序:最简单的一种排序算法。先从数组中找到最大值(或最小值)并放到数组最左端(或最右端),然后在剩下的数字中找到次大值(或次小值),
以此类推,直到数组有序排列。算法的时间复杂度为O(n^2)。
for (int i=0;i<10;i++)
    {
        for (int j=i+1;j<10;j++)
        {
            if (a[i]>a[j])
            {
                temp = a[j];
                a[j] = a[i];
                a[i] = temp;
            }
        }
    }
    
for (int i=0;i<10;i++)
    {
        for (int j=9;j>=i+1;j--)
        {
            if (a[j-1]>a[j])
            {
                temp = a[j];
                a[j] = a[j-1];
                a[j-1] = temp;
            }
        }
    }
 
第二种应该是正统的,符合那个逻辑流程的冒泡排序
 
2、选择排序
 
严蔚敏版《数据结构》中对选择排序的基本思想描述为:每一趟在n-i+1(i=1,2,...,n-1)个记录中选取关键字最小的记录作为有序序列中第i个记录。
具体来说,假设长度为n的数组arr,要按照从小到大排序,那么先从n个数字中找到最小值min1,如果最小值min1的位置不在数组的最左端(也就是min1不等于arr[0]),
则将最小值min1和arr[0]交换,接着在剩下的n-1个数字中找到最小值min2,如果最小值min2不等于arr[1],则交换这两个数字,依次类推,直到数组arr有序排列。
算法的时间复杂度为O(n^2)。
 
int  a[10] = { 5,6,9,8,9,6,3,5,1,3 };
    int temp = -1;
    int index = 0;
    for (int i=0;i<10;i++)
    {
        index = i;
        temp = a[i];//每次进入排序的时候,假设自己为最小的
        for (int j=i+1;j<10;j++)
        {
            if (temp>a[j])
            {
                index = j;//如果发现自己不是最小的,那么就记录这个值,和下标的值
                temp = a[j];
            }
        }
        a[index] = a[i];
        a[i] = temp;//互相交换值
    }
    for (int i=0;i<10;i++)
    {
        cout << a[i] << " ";
    }
    
3.插入排序的基本思想就是将无序序列插入到有序序列中。例如要将数组arr=[4,2,8,0,5,1]排序,可以将4看做是一个有序序列(图中用蓝色标出),
将[2,8,0,5,1]看做一个无序序列。无序序列中2比4小,于是将2插入到4的左边,此时有序序列变成了[2,4],无序序列变成了[8,0,5,1]。无序序列中8比4大
,于是将8插入到4的右边,有序序列变成了[2,4,8],无序序列变成了[0,5,1]。以此类推,最终数组按照从小到大排序。该算法的时间复杂度为O(n^2)。
 
这是我初步写的,算是半成品的插入排序吧,
for (int i=1;i<10;i++)//新插入的i下标
    {
        for (int j=0;j<i;j++)//已经拍好序的部分,初始是第一位0假设排好序了
        {
            if (a[i]<a[j])
            {
                temp = a[j];
                a[j] = a[i];
                a[i] = temp;
            }
        }
        for (int i = 0; i < 10; i++)
        {
            cout << a[i] << " ";
        }
        printf("\n");
    }
    
下面这个才是符合插入排序逻辑的插入排序:    
int  a[10] = { 8,9,6,3,5,7,1,2,4,0};
    int temp = -1;
    int index = 0;
    for (int i=1;i<10;i++)
    {
        temp = a[i];//要插入的数
        for (index =i-1; index >=0; index--)
        {
            if (temp<a[index])
            {
                a[index + 1] = a[index];
            }
            else
            {
                break;
            }
            for (int i = 0; i < 10; i++)
            {
                cout << a[i] << " ";
            }
            printf("\n");
        }
        a[index + 1] = temp;
    }
    for (int i = 0; i < 10; i++)
    {
        cout << a[i] << " ";
    }
    printf("\n");
 
 

猜你喜欢

转载自www.cnblogs.com/yuzhiboprogram/p/9978060.html
今日推荐