C++中的排序算法---神奇的数据算法

C++中的排序算法---神奇的数据算法

1、冒泡排序

#include <stdio.h>
#define SIZE 8
 
void bubble_sort(int a[], int n);
 
void bubble_sort(int a[], int n)
{
    int i, j, temp;
    for (j = 0; j < n - 1; j++)//外循环
        for (i = 0; i < n - 1 - j; i++)//内循环 可以理解成 for(i=0;i<n-(j+1);i++)  
        {                              //因为外循环拿出来一个数,同剩下内循环中其他数进行比较
            if(a[i] > a[i + 1])//用内循环中的数据进行对比
            {
                temp = a[i];
                a[i] = a[i + 1];
                a[i + 1] = temp;
            }
        }
}
 
int main()
{
    int number[SIZE] = {95, 45, 15, 78, 84, 51, 24, 12};
    int i;
    bubble_sort(number, SIZE);
    for (i = 0; i < SIZE; i++)
    {
        printf("%d", number[i]);
    }
    printf("\n");
}
冒泡排序

2、选择排序

    在要排序的一组数中,选出最小(或者最大)的个数与第1个位置的数交换然后在剩下的数当中再找最小(或者最大)的与第2个位置的数交换,依次类推,直到第n-1个元素(倒数第二个数)和第n个元素(最后个数)比较为止。

#include<stdio.h>
int  main(){
    int a[10] = { 22, 5, 9, 10, 11, 43, 2, 31, 3, 6 };
    puts("原始数据:");
    for (int i = 0; i<10; i++) 
        printf("%d ", a[i]);
    

    int i = 0,nMin=0;
    while (i < 9){//外循环,拿出一个,自己无需和自己比较
        nMin = i;//假如第一位置为最小值;后期找到数组的最小值,
                 //将最小值的位置再重新付给nMin
        int j = i + 1;//i=0时候,j从后面;j是跑龙套的
        while (j < 10){
            if (a[j] < a[nMin]){//跑龙套找到的数组值同最小值比还小
                int t = a[nMin];
                a[nMin] = a[j];//重新将找到的最小值赋给nMin
                a[j] = t;
            }
            ++j;
        }
        ++i;
    }
    puts("\n选择排序后的数据:");
    for (int i = 0; i<10; i++)
        printf("%d ", a[i]);
    
    return 0;
}
选择排序

 

posted @ 2017-08-05 00:15  心沉大海-汇聚成一  阅读(130)  评论(0)    收藏  举报