单向冒泡排序
void BubbleSort(int a[], int length)//冒泡排序
{int i, j;for(i = 0; i < length-1; i++)///length-1个数需要进行比较{for(j = 0; j < length-1-i; j++)每循环一次可以找到最大的数放在最后一个位置、依次进行{if(a[j] > a[j+1]) //若前一个数大于后一个数,则交换位置{Swap(a[j], a[j+1]);}}}
}双向冒泡排序
void DoubleBubbleSort(int a[],int length)
{int low=0,high=length-1,i,j;while(low<high){for(i=low;i<high;i++)//正向冒泡,从前往后找最大值{if(a[i]>a[i+1]){swap(a[i],a[i+1]);}}high--;for(j=high;j>low;j--)//反向冒泡,从后往前找最小值{if(a[j]<a[j-1]){swap(a[j],a[j-1])}}low++;}}
void QuickSort_1(int a[], int left, int right)
{int i=left,j=right,k=a[right];//选择最后一个元素为基准元素while(i < j){while(i < j && arr[i] <= k)//正向遍历、找出大于基准元素的下标{i++;}arr[j] = arr[i];while(i <j && arr[j] >= k)反向遍历、找出小于基准元素的下标{j--;}arr[i] = arr[j];}arr[i] = k;QuickSort_1(arr, left, i-1); //递归完成基准元素左边序列的排序QuickSort_1(arr, i+1, right); //递归完成基准元素右边序列的排序
}
void SelectSort(int a[],int length)
{int i=0,j=length-1,k;for(;i<length-1;i++){k=i;for(j=i+1;j<length;j++){if(a[k]>a[j])///记住最大值下标k=j;}if(k!=i){swap(a[i],a[k]);//交换最大值下标}}}
- 4:堆排序
- 5:希尔排序
- 6:归并排序
- 7:直接插入排序