笔试题汇集之排序算法(C/C++)

原创 2012年03月25日 22:25:22

void swap(int* p, int* q) {

int temp;

temp = *p;

*p = *q;

*q = temp;

}

 

//冒泡排序

void sort(int* a, int n) {

for(int i=0; i<n-1;++i)

for(int j=0; j<n-i-1;++j)

if(a[j] > a[j+1])

swap<int>(a+j,a+j+1);

}

 

//选择排序

void sort2(int* a, int n) {

for(int i=0; i<n-1;++i) {

int temp = i;

for(int j=i; j<n; ++j){

if(a[temp] > a[j])

temp = j;

}

if(temp != i)

swap(a+temp, a+i);

}

}

 

//插入排序

void sort3(int* a, int n) {

for(int i=1; i<n; ++i){

for(int j=0; j<i; ++j){

if(a[i] < a[j]) {

swap(a+i, a+j);

for(int k=i; k>j+1;--k) {

swap(a+k, a+k-1);

}

break;

}

}

cout << "" << i << ":";

print(a, n);

}

}

 

//快速排序(一)

void sort4(int* a, int n) {

if(n <= 1)

return;

int left=0;

int right=n-1;

while(left<right) {

while(left<right&& a[left] <= a[right])

--right;

swap(a+left, a+right);

while(left<right&& a[left] <= a[right])

++left;

swap(a+left, a+right);

}

sort(a, left);

sort(a+left+1, n-left-1);

}

 

 

//快速排序(二)

void sort5(int* a, int n) {

if(n <= 1)

return;

int left=0;

int right=n-1;

int temp = a[0];

while(left<right) {

while(left<right&& temp <= a[right])

--right;

a[left] = a[right];

while(left<right&& a[left] <= temp)

++left;

a[right] = a[left];

}

a[left] = temp;

print(a, n);

sort5(a, left);

sort5(a+left+1, n-left-1);

}

相关文章推荐

Java笔试题:只能进行0与其他数的swap操作的排序算法

题目:长度为N的数组乱序存放着0到N-1.现在只能进行0与其他数的 swap 操作,请设计并实现排序,必须通过交换实现排序。...

C-C++排序算法总结

  • 2010年03月27日 13:06
  • 3KB
  • 下载

C++ 归并排序算法的实现与改进(含笔试面试题)

归并排序(Merge sort)是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用,即把待排序序列分为若干个子序列,每个子序列是有序...

C、C++排序算法代码综合.doc

  • 2011年04月17日 18:41
  • 31KB
  • 下载

C++ 选择排序算法的实现与改进(含笔试面试题)

选择排序(Selection sort)也是一种最简单直观的排序算法。 算法步骤 1)首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置 2)再从剩余未排序元素中继续寻找最小(大)元...

C/C++排序算法

  • 2011年12月02日 09:36
  • 61KB
  • 下载

C++ 计数排序算法的实现与改进(含笔试面试题)

计数排序局限性比较大,算法思想:假定输入是有一个小范围内的整数构成的(比如年龄等),利用额外的数组去记录元素应该排列的位置,思想比较简单。 计数排序是典型的不是基于比较的排序算法,基于比较的排序算法...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:笔试题汇集之排序算法(C/C++)
举报原因:
原因补充:

(最多只允许输入30个字)