cc++的排序算法

    科技2022-07-11  100

    1.排序算法:将一维数组升序排列 选择排序:在进行选择排序过程中分成有序和无序两个部分,开始都是无序序列。从头至尾扫描序列,找出最小(最大)的一个元素,和第一个元素交换,接着从剩下的元素中继续这种选择和交换方式,最终得到一个有序序列。

    int sort(int array[], int n) { int i,j,tmp; for (i = 0; i < n - 1; i++) /* n个数字进行排序,共需要进行n-1趟比较。此处i的取值从0到n-1,共n-1趟 */ { for (j = i + 1; j < n; j++) { if (array[j] < array[i]) //在无序中两两比较,取出最小值于首部 { tmp = array[j]; /* 取出当前位置及之后的数字(待排序数字)中最小的值,赋值 */ array[j] = array[i]; array[i] = tmp; } } } return 0; } 指针形式 void select_sort(int *a,int n) //传入数组名 array { int i,j; for(i = 0;i<n-1;i++){ for(j = i+1;j < n;j++){ if(*(a+i)>*(a+j)){ int temp; temp = *(a+i); *(a+i) = *(a+j); *(a+j) = temp; } }

    2.冒泡排序:它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。

    int arr[]={2,1,5,3,4,6}; //对该数组进行排序 for(int i=0;i<arr.length-1;i++){ //遍历数组角标为0到最大长度减一的数 for(int j=0;j<arr.length-i-1;j++){ //遍历的数每次循环减少一个 if(arr[j]<arr[j+1]){ //比较大小 小的逐渐上浮 int temp=arr[j]; arr[j]=arr[j+1]; arr[j+1]=temp; } } } 指针形式 for(int i = 0;i<n;i++){ //据说定义写在for()里面能加快代码速度,但会影响可读性 for(int j = i;j < n;j++){ if(*(a+i)>*(a+j)){ int temp; temp = *(a+i); *(a+i) = *(a+j); *(a+j) = temp; } } }

    3.插入排序:将第一个数据视为有序,往后的数据视为无序,从数组的第二个数据开始往前比较,即一开始用第二个数和他前面的一个比较,如果符合条件(比前面的大或者小,自定义),则让他们交换位置

    for (int i = 1; i < n; i++) { int j = i; while (j > 0){ if (arr[j] < arr[j-1]){ //与前面一个数进行比较 int temp; temp = arr[j]; arr[j] = arr[j-1]; arr[j-1] = temp; j--; //j-- 使得比较框往前移动 }else { break; } } } for(i=1;i<n;i++) //默认第一位即a[0]为有序,往后的为无序,次数为无序组里的个数 { int j=i; //注意j=1的位置 while(j>0) //当j不为0的时候持续循环比较 { if(a[j]<a[j-1]) //当前位置的数跟前一个数进行比较 { temp=*(a+j); *(a+j)=*(a+j-1); *(a+j-1)=temp; j--; } else break; } }
    Processed: 0.029, SQL: 8